【问题标题】:how to explode a string to use in a image tag如何分解要在图像标签中使用的字符串
【发布时间】:2021-03-09 03:42:03
【问题描述】:

我以字符串格式在数据库列中存储了多个图像,例如 "image1 image2 image3" 使用 implode(" ",$imagesArray) 现在我想分解这个字符串并想在图像源名称中使用它,就像我在下面尝试的那样

@foreach (explode(" ",$images) as $item)
<img src="{{ asset('storage/images'.$item) }}">
@endforeach

它像分裂一样

 0 => "[{"image":"image3.png"
  1 => "image3.png"
  2 => "image3.png"}]"

我希望它像这样分裂

 0 => "image3.png"
  1 => "image3.png"
  2 => "image3.png"

是的,图像本地存储在 storage/images 路径中,

是的,$Images 包含

[{"image":"image1.png image2.png image3.png"}]

如何将每个图像用于图像 src 请帮助我,我是 php 和 laravel 的新手,在此先感谢

【问题讨论】:

  • 尝试@foreach 循环时遇到的错误
  • 它没有像我预期的那样拆分字符串,它像爆炸一样爆炸,0 => "[{"image":"1606378172_444px-Apache_NetBeans_Logo.svg.png" 1 => "1606378172_iconfinder_android_245977.png" 2 => "1606378172_iconfinder_Edit-01_1976055.png"}]"
  • 试试asset('storage/images/'.$item)你在/上不见了
  • foreach循环前$images的内容是什么?
  • [{"image":"image1.png image2.png image3.png"}]

标签: php laravel controller laravel-blade laravel-8


【解决方案1】:

假设数组可以包含多个元素,正如@WeslySmith 的评论中所指出的那样

//Say images has value like
$images = ['{"image":"image1.png image2.png image3.png"}','{"image":"image4.png image5.png image6.png"}'];

$pathString = collect($images)->map(function($image) {
    return json_decode($image)->image;
})
  ->values()
  ->reduce(function($carry, $item){
      return $carry .= $item;
  });

然后

@foreach (explode(' ', $pathString as $image)
    <img src="{{ asset('storage/images/'.$image) }}">
@endforeach

【讨论】:

  • 不幸的是,整个数组似乎是一个 JSON 字符串,而不是一个 PHP 数组包含 JSON 字符串
  • 也就是说,OP 正在使用 Laravel 并从数据库中获取这些数据,因此如果我们可以看到该代码,我们可能会摆脱所有 JSON 内容并直接遍历数据库行的集合.
【解决方案2】:

如果您向我们展示如何从数据库中获取数据,我们可能可以避免解码为下面使用的数组。

从您显示的内容来看,您那里似乎有一个 JSON 字符串。如果是这样,您不应该立即将其爆炸,而是先对其进行解码并获得所需的道具,然后再将其爆炸:

@php
     $string = '[{"image":"image1.png image2.png image3.png"}]';
     $rows   = json_decode($string, true);
@endphp

@foreach ($rows as $row)

     @php
        $imageStr = $row['image'] ?? '';
        $images   = explode(" ", $imageStr);
     @endphp

     @foreach ($images as $image)
        <img src="{{ asset('storage/images'.$image) }}">
     @endforeach

@endforeach

##注意 如果我这样做,我可能会将逻辑移动到控制器,将每个图像路径添加到一个数组,将该数组传递给视图,然后让视图简单地循环该数组,输出每个图像标签。这样一来,所有视图都不会被所有逻辑弄得一团糟。

【讨论】:

  • 非常感谢楼主,我不知道json字符串今天学到了新东西,效果很好,
【解决方案3】:

根据你的评论$images是一个JSON字符串,所以你需要先解码:

@foreach (explode(' ', json_decode($images, true)[0]['image'] ?? '') as $image)
    <img src="{{ asset('storage/images/'.$image) }}">
@endforeach

【讨论】:

  • 注意,这是假设数组中只有一个元素。这可能是可以接受的,但考虑到它是一个数组,考虑多个可能会更好。
  • 它也完美而简短,感谢您宝贵的时间,先生
  • @WesleySmith 好点。正如您在回答中所说,我同意您的看法,可能有一种方法可以避免完全进行 JSON 杂耍
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2017-06-29
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多