如何在laravel中获取数组元素的文件扩展名
Posted
技术标签:
【中文标题】如何在laravel中获取数组元素的文件扩展名【英文标题】:how to get file extensions of array elements in laravel 【发布时间】:2019-10-18 21:36:07 【问题描述】:我正在尝试获取数据库中图像列的文件扩展名,但出现此错误:
pathinfo() 期望参数 1 是字符串,给定数组。
下面是我的控制器代码:
$news = DB::table('news')
->select('image')
->where('id', '=', 'user_id')
->get();
$file = $news;
$ext = pathinfo($file, PATHINFO_EXTENSION);
return view('pages.index',compact('ext'));
这是我的看法:
@if($ext == 'mp4' || $ext == 'mov' || $ext == 'vob' || $ext == 'mpeg' || $ext == '3gp' || $ext == 'avi' || $ext == 'wmv' || $ext == 'mov' || $ext == 'amv' || $ext == 'svi' || $ext == 'flv' || $ext == 'mkv' || $ext == 'webm' || $ext == 'gif' || $ext == 'asf')
<video controls>
<source src="URL::asset('upload/news/'.$topnews->image) " type="video/mp4">
Your browser does not support the video tag.
</video>
@else
<img src=" URL::asset('upload/news/'.$topnews->image) " class="img-responsive" >
@endif
这是我的路线:
Route::get('/', 'IndexController@index');
【问题讨论】:
所以遍历数组,不是吗? 【参考方案1】:遍历您的数组并将pathinfo
应用于数组的每个元素:
$extensions = [];
foreach ($news as $file)
$extensions[$file] = pathinfo($file, PATHINFO_EXTENSION);
【讨论】:
我在我的视图中得到未定义的变量扩展,可能是因为它不是全局的。那么如何将 $extension 变量的新值加载到我的视图中 像任何其他变量一样。 感谢您的回复,但我尝试打印变量 $extensions 但没有打印任何内容。似乎为空【参考方案2】:Laravel 提供了一个 value
函数来直接从查询中接收一个值。
将您的查询更改为
$news = DB::table('news')
->select('image')
->where('id', '=', 'user_id')
->value('image');
您也可以省略 select
,因为 value 已经这样做了
$news = DB::table('news')
->where('id', '=', 'user_id')
->value('image');
Documentations
如果你的 Laravel 版本不支持value
,那么使用first
$news = DB::table('news')
->select('image')
->where('id', '=', 'user_id')
->first()->image;
【讨论】:
我遇到的问题在这里:$ext = pathinfo($file, PATHINFO_EXTENSION); $file 是一个数组并给出一个错误【参考方案3】:从查询中返回第一个对象并从模型的图像属性中获取扩展名
$topnews = DB::table('news')
->select('image')
->where('id', '=', $user_id)
->first();
$ext = pathinfo($topnews->image, PATHINFO_EXTENSION);
return view('pages.index', compact('ext', 'topnews'));
希望对你有帮助
我也希望您不在视图中的 foreach 循环中 :)交叉手指
【讨论】:
我收到此错误:致命错误:调用数组上的成员函数 map() 你在get
之后写map
吗?
是的,我使用了您发送的确切代码。并且错误表明我不能在数组上使用 map()
没有任何意义,尝试更新代码,然后编辑问题并发表您的观点
编辑问题并添加路由和控制器方法并查看 :) 如果没有您的代码,我们将无法帮助您以上是关于如何在laravel中获取数组元素的文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章