循环遍历json,具有多个键值(某些相同的值)

问题描述 投票:0回答:2

我从数据库中导出了一些条目,它给了我以下JSON:

[
  {
    "Artist_Title": "17 Hippies",
    "Gallery_Image_Filename": "17Hippies-2011-web.jpg"
  },
  {
    "Artist_Title": "17 Hippies",
    "Gallery_Image_Filename": "christo.jpg"
  },
  {
    "Artist_Title": "17 Hippies",
    "Gallery_Image_Filename": "kiki1.jpg"
  },
  {
    "Artist_Title": "17 Hippies",
    "Gallery_Image_Filename": "17-hippies.jpg"
  },
  {
    "Artist_Title": "17 Hippies",
    "Gallery_Image_Filename": "Photo1.jpg"
  },
  {
    "Artist_Title": "Ann Savoy Trio",
    "Gallery_Image_Filename": "Savoy-Trio-B&W-resize342x.jpg"
  },
  {
    "Artist_Title": "Baghdaddies",
    "Gallery_Image_Filename": "Baghdaddies-(Small).JPG"
  },
  {
    "Artist_Title": "Baghdaddies",
    "Gallery_Image_Filename": "Baghdaddies2.jpg"
  }
]

其中包含与帖子关联的图库图像。我已导出帖子标题(Artist_Title)和图像文件名(Gallery_Image_Filename)。

一个帖子可以有多个图库图像,这里的最终目标是做一个foreach和var转储列表,例如

wget www.[domain].com/images/17Hippies-2011-web.jpg -O 17-hippies-gallery-1.jpg
wget www.[domain].com/images/christo.jpg -O 17-hippies-gallery-2.jpg
wget www.[domain].com/images/kiki1.jpg -O 17-hippies-gallery-3.jpg
wget www.[domain].com/images/17-hippies.jpg -O 17-hippies-gallery-4.jpg
wget www.[domain].com/images/Photo1.jpg -O 17-hippies-gallery-5.jpg
wget www.[domain].com/images/Savoy-Trio-B&W-resize342x.jpg -O ann-savoy-trio-1.jpg
wget www.[domain].com/images/Baghdaddies-(Small).JPG -O baghdaddies-gallery-1.jpg
wget www.[domain].com/images/Baghdaddies2.jpg -O 17-baghdaddies-gallery-2.jpg

所以基本上我正在创建一个图像网址的wget列表以及它们的新文件名。我正在拿帖子标题,消毒它,附加-gallery- [数字],其中数字需要与它找到的Artist_Title的数量相匹配。

我有这个foreach循环,我只需要修改它来添加 - [数字]基于现在的帖子数量

foreach($gallery as $image) {
    echo 'wget https://www.accessallareas.info/images/' . $image->Gallery_Image_Filename . ' -O ' . sanitize_title($image->Article_Title) . '-gallery.jpg';
    echo '<br>';
}

这可以实现吗?

php json
2个回答
1
投票

您可以为每个帖子保存一个计数器并在循环中检查它。

试试这个:

$pCounter = 0; // for Post counter
$artistTitle = '';
foreach($gallery as $image) {
    if ($image->Artist_Title !== $artistTitle) {
       $pCounter = 0;
    }
    $counter++;
    echo 'wget https://www.accessallareas.info/images/' . $image->Gallery_Image_Filename . ' -O ' . $image->Artist_Title . '-gallery-'. $pCounter . '.jpg';
    echo '<br>';
    $artistTitle = $image->Artist_Title;
}

注意:

  • 您的代码中有拼写错误。 Article_Title应该是Artist_Title
  • 您需要在代码顶部使用json_decode($json);将JSON转换为对象数组。

0
投票

一切都是可以实现的。

$counter = 0;
$article_title = '';
foreach($gallery as $image) {
    if ($image->Article_Title !== $article_title) {
       $counter = 0;
    }
    $counter++;
    echo 'wget https://www.accessallareas.info/images/' . $image->Gallery_Image_Filename . ' -O ' . sanitize_title($image->Article_Title) . '-gallery-'. $counter .'.jpg';
    echo '<br>';
    $article_title = $image->Article_Title;
}
© www.soinside.com 2019 - 2024. All rights reserved.