通过特定值合并关联数组不起作用

时间:2015-01-12 14:53:54

标签: php multidimensional-array

我想将$my_array合并为 group_order 值。

初始$my_array结构:

array(4) {
  array(1) { 
    object(stdClass) {
      ["title"]=> string(23) "Title 1"
      ["group_order"]=> string(1) "2"
    }
  }
  array(1) {
    object(stdClass) {
      ["title"]=> string(32) "Title 2"
      ["group_order"]=> string(1) "1"
    }
  }
  array(1) {
    object(stdClass) {
      ["title"]=> string(21) "Title 3"
      ["group_order"]=> string(1) "1"
    }
  }
  array(1) {
    object(stdClass) {
      ["title"]=> string(23) "Title 4"
      ["group_order"]=> string(1) "2"
    }
  }
}

期望的结果:

array(2) {
  array(2) { 
    object(stdClass) {
      ["title"]=> string(23) "Title 1"
      ["group_order"]=> string(1) "2"
    }
    object(stdClass) {
      ["title"]=> string(23) "Title 4"
      ["group_order"]=> string(1) "2"
    }
  }
  array(2) {
    object(stdClass) {
      ["title"]=> string(32) "Title 2"
      ["group_order"]=> string(1) "1"
    }
    object(stdClass) {
      ["title"]=> string(21) "Title 3"
      ["group_order"]=> string(1) "1"
    }
  }
}

我试着这样做:

foreach ($my_array as $row) {
    foreach ($row as $item) {
        $grouped[$item->group_order] = $row;
    }
}

但是第二组元素总是在第一组元素中,而不是包含4个项目的数组,而是第二组元素。我也尝试了 array_merge(),但结果是一样的。

2 个答案:

答案 0 :(得分:4)

尝试在末尾添加空括号[],以便将值附加到数组,而不是覆盖它们。

foreach ($my_array as $row) {
    foreach ($row as $item) {
        $grouped[$item->group_order][] = $item;
    }
}

答案 1 :(得分:0)

你添加了一个你出于某种原因不需要的foreach?并保持他们分开只是给他们一个id。

$i=0;
foreach ($myarray as $item) {
    $grouped[$item->group_order][$i] = $item;
    $i++;
}