如何从多个图像源获取单个图像源

时间:2018-09-25 13:03:34

标签: php

我得到了这种类型的数组:

    $data = array (
    $imageData => array (
        0 => array (
          'id' => 2224689676,
          'product_id' => 56286180,
          'position' => 1,
          'src' => '87643-674-1.jpg?v=1521829158',
          'variant_ids' => array (),
        ),
        1 => array (
          'id' => 50653369,
          'product_id' => 56286180,
          'position' => 2,
          'src' => 'https://pro.PNG?v=1537789170',
          'variant_ids' => array (0 => 7137761),
        ),
        2 => array (
          'id' => 506533950,
          'product_id' => 56286180,
          'position' => 3,
          'src' => 'product_description.PNG?v=1537789191',
          'variant_ids' => array (
            0 => 7137761,
          ),
        ),
        3 => array (
          'id' => 508279531,
          'product_id' => 56286180,
          'position' => 6,
          'src' => 'Untitled.png?v=1537865220',
          'variant_ids' => array (
             0 => 7137761,
             1 => 71377617
           ),
        ),
    ),
);

我想在显示src索引的变体count > 0时显示实索引的src,否则显示[0]的索引。注意:一张图片具有多个变体ids

我正在尝试以下代码:

$images=array_column($data,'imageData');

$image1=[];
foreach ($images as $image)
{
    $imageData = array_column($image, 'variant_ids');
    $imageSrc = array_column($image, 'src');
    if (count($imageData) > 0)
    {
        $image1[]=$image;
    }
    $image1 = $imageSrc[0];
}

我想要这种类型的输出:

$image = array(0=> array(7137761 =>"Untitled.png?v=1537865220"),
               1=>array(71377617 => "Untitled.png?v=1537865220"),
               2=>array(7137761=>"product_description.PNG?v=1537789191"),
            if array emtpty so 
            3=>87643-674-1.jpg?v=1521829158
            );

2 个答案:

答案 0 :(得分:0)

foreach($data['imageData'] as $image)
{
  if(count($image['variant_ids'])>0)
      foreach($image['variant_ids'] as $variant)
          $result[] = array($variant => $image['src']);
  else
      $result[] = $image['src'];
}
echo '<pre>';
print_r($result);
echo '</pre>';

答案 1 :(得分:0)

如果有意外输出,请尝试对数组进行print_r。

但是:

  

$ imageSrc不是数组,因此它没有元素0

     

您需要有一个else语句,如果不是这样,则始终执行if之后的代码,而且$ image1 = $ imageSrc会覆盖$ image1的全部内容

无论如何,此代码应该有效:

Button

如果您想要$ imgSrc的默认值,则需要在循环之前获取它:

$images = $data['imageData'];

$imagesWithVariants=[];
foreach ($images as $image)
{
    $imageData = $image['variant_ids'];
    $imageSrc = $image['src'];
    if (count($imageData) > 0)
    {
        $imagesWithVariants[]=array($imageData[0] => $imageSrc);
    }else{
        $imagesWithVariants[]=$imageSrc;
    }

}

print_r($imagesWithVariants);
  

array_column 不适用于for循环,在这里您可以检查manual

使用array_column的示例:

$defaultImgSrc = $images[0]['src'];

foreach(....){
  .
  .
  .
  if(...){
    .
    .
  }else{
     $imagesWithVariants[]=$defaultImgSrc;
  }
}

编辑:

很明显,如果您有多个变体并且都想要它们,那么您需要在变体上进行学习:

$images = $data['imageData'];

$imagesWithVariants=[];

$imageData = array_column($images,'variant_ids');
$imageSrc = array_column($images,'src');



foreach($imageData as $key=>$data){
    if(count($data) > 0){
        $imagesWithVariants[]= array($data[0]=>$imageSrc[$key]);
    }else{
        $imagesWithVariants[]=$imageSrc[0];
    }
}

print_r($imagesWithVariants);