0

我有一个数组,我想将具有相同 id 值的子数组合并在一起:

    <?php 
        $a = Array(
        Array
            (
            "id" => 1,
            "id_categorie" => 1,
            "nb" => 18
           ),
           Array
           (
            "id" => 1,
            "id_categorie" => 8,
            "nb" => 14
         ),
        Array
        (
            "id" => 2,
            "id_categorie" => 10,
            "nb" => 15
        )

);
$result = array();

foreach ($a as $k=>$v){

    $result[$v['id']] =$v; 


}

echo '<pre>';
print_r($result);
echo '</pre>';    
?>

我有:

Array
(
    [1] => Array
        (
            [id] => 1
            [id_categorie] => 8
            [nb] => 14
        )

    [2] => Array
        (
            [id] => 2
            [id_categorie] => 10
            [nb] => 15
        )

)

但我想要的是:

Array
(
    [1] => Array
        (
             Array
          (                   
                "id_categorie" => 1,
                "nb" => 18
           ),
         Array
         (                
             "id_categorie" => 8,
             "nb" => 14
         )
      )

    [2] => Array
        (
            [id_categorie] => 10
            [nb] => 15
        )

)

任何人都可以告诉我如何做到这一点?谢谢

4

1 回答 1

1

试试这个:

$result = array();
foreach ($a as $arr) {
    // unset the 'id' index; it becomes the array's index instead
    $id = $arr['id'];
    unset($arr['id']);
    if (!isset($result[$id])) {
        // add the new item as a top-level element
        $result[$id] = $arr;
    } else if (isset($result[$id]['id_categorie'])) {
        // the current 'id' is set as a top-level element; convert it
        // into a sub-array and also add the new element to it
        $new = array($result[$id], $arr);
        $result[$id] = $new;
    } else {
        // we already have a sub-array of items; add the new element
        $result[$id][] = $arr;
    }
}

它应该产生您想要的输出,尽管未经测试/等。如果未遇到 an id,它将将该完整元素添加到$result数组中。如果之前id遇到过一次,它会将前一个实例转换为一个数组并将新实例也添加到其中。相同的所有其他实例也将添加到该数组中。id

于 2012-09-12T21:53:35.040 回答