在没有键的情况下将对象元素添加到数组=>值

时间:2019-01-18 15:34:29

标签: php arrays

我目前正在根据对象构建数组,并且有一个名为images的元素,该元素具有多个子元素,称为“ urls”,其结构类似

categories": [
    {
      "images": [
        {

          "urls": [
            "path/test.jpg",
            "path/test2.jpg",
            "path/test3.jpg"
          ],
        },
        {

          "urls": [
            "path/test4.jpg",
            "path/test5.jpg",
            "path/test6.jpg"
          ],

        },
        {

          "urls": [
            "path/test7.jpg",
            "path/test8.jpg",
            "path/test9.jpg"
          ],

        },
]

那里的值没有键,它只是URL路径,但我想将它们添加到我的$groupItem数组中,只是让每个URL是与组号处于同一级别的自己的元素(基本上,我正在导出,并且需要每个url作为其自己的列)

我想要的结构

0 =>"path/test.jpg",
1 =>"path/test2.jpg",
2 =>"path/test3.jpg"
3 =>"path/test4.jpg",
4 =>"path/test5.jpg",
5 =>"path/test6.jpg"
6 =>"path/test7.jpg",
7 =>"path/test8.jpg",
8 =>"path/test9.jpg"

循环/数组:

foreach($prices->groups as $group){ 
    $groupItem = array(); 
    $groupItem["number"] = $group->number;

    foreach($group->images as $images){
        $groupItem["urls"] = $images->urls;
    }
}

如何简单地将任何URL添加到该数组的groupItem级别?

2 个答案:

答案 0 :(得分:2)

在外部循环之外,将值初始化为一个空数组:

$groupItem["urls"] = [];

然后使用空数组引用运算符将​​新值附加到数组的末尾:

foreach($group->images as $images){
    $groupItem["urls"][] = $images->urls; // add this url to the end of the list
}

或者,使用array_push()

foreach($group->images as $images){
    array_push($groupItem["urls"], $images->urls);
}

我认为您也可以跳过内部循环,仅使用数组爆炸运算符,如下所示:

array_push($groupItem["urls"], ...$images->urls);

答案 1 :(得分:1)

您还可以将array_columnvariable length参数列表一起使用(自php 5.6起):

例如,对于包含对象数组的图像,其中每个对象都具有属性urls并包含图像URL数组:

foreach ($prices->groups as $group) {
    $groupItem = array();
    $groupItem["number"] = $group->number;
    $groupItem= array_merge($groupItem, ...array_column($group->images, "urls"));    
}

Demo