如何在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中获取数组元素的文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

如何在Laravel中将子数组元素导出为ex cel

Laravel 4 中 File::mime() 的替换(从文件扩展名中获取 mime 类型)

如何在 PHP 中获取文件扩展名? [复制]

从数组 Laravel 中获取元素总和

#laravel笔记# 文件上传

在laravel-excel中循环遍历数组中的数组