Как сделать 1 карман с тем же идентификатором из массива

#php #arrays

#php #массивы

Вопрос:

 <?php
$a = [["product"=>"another2", "id"=>112],["product"=>"xyz", "id"=>113], ["product"=>"lmn", "id"=>113],["product"=>"abc", "id"=>113],  ["product"=>"another", "id"=>112]];

$data = [];
$products = [];

foreach ($a as $b) {

  $products[]["product"] = $b["product"];

  $data[$b["id"]] = $products;

}

echo "<pre>";
print_r($data);
  

и результат

   Array ( [112] => Array ( [0] => Array ( [product] => another2 ) [1] => Array ( [product] => xyz ) [2] => Array ( [product] => lmn ) [3] => Array ( [product] => abc ) [4] => Array ( [product] => another ) ) [113] => Array ( [0] => Array ( [product] => another2 ) [1] => Array ( [product] => xyz ) [2] => Array ( [product] => lmn ) [3] => Array ( [product] => abc ) ) ) 
  

я хочу сделать 1 карман с теми же идентификаторами.
сделайте 1 карман, если идентификатор равен 112 из всего массива. например, мне нужно

 Array
(
    [112] => Array
        (


            [0] => Array
                (
                    [product] => xyz
                )

            [2] => Array
                (
                    [product] => lmn
                )

            [3] => Array
                (
                    [product] => abc
                )



        )

    [113] => Array
        (
            [0] => Array
                (
                    [product] => another
                )
            [1] => Array
                (
                    [product] => another2
                )

                           )
        )
)
  

Как я могу получить этот вывод? кто-нибудь может помочь мне сделать это возможным. Мне нужен 1 массив, если идентификатор такой же, как и в другом массиве, когда идентификатор отличается

Ответ №1:

Вы очень близки. Вам не нужно определять $products каждый раз. Просто выполните цикл по массиву (сохраняя $k как ключ) и назначьте.

Рассмотрим:

 $a = [["product"=>"another2", "id"=>112],["product"=>"xyz", "id"=>113], ["product"=>"lmn", "id"=>113],["product"=>"abc", "id"=>113],  ["product"=>"another", "id"=>112]];

$data = [];
foreach ($a as $k => $b) {
  $data[$b["id"]][$k]["product"] =  $b["product"];
}
  

Теперь $data будет вывод вашего желания.

Живой пример: 3v4l

Ответ №2:

Проверьте ниже рабочий код:

 $a = [["product"=>"another2", "id"=>112],["product"=>"xyz", "id"=>113], ["product"=>"lmn", "id"=>113],["product"=>"abc", "id"=>113],  ["product"=>"another", "id"=>112]];

$products = [];

foreach ($a as $b) {    
  $products[$b["id"]][]["product"] = $b["product"];
}

echo "<pre>";
print_r($products);
  

Ответ №3:

Попробуйте это

 $arr1 = [];
foreach($arr as $k => $v){
 if(array_key_exists($v['id'], $arr1))
    $arr1[$v['id']][]['product'] = $v['product'];
 else
    $arr1[$v['id']][]['product'] = $v['product'];
}