如何针对多维数组中的制造商查找产品数量

时间:2019-07-05 11:39:17

标签: php arrays laravel

我正在创建一个Web应用程序,该应用程序需要显示单个制造商的产品总数,但是我必须从多维数组中获取数据,其中多个数组包含相同的制造商ID但代表不同的产品

array:1 [▼
  "Concrete" => array:199 [▼
    0 => array:26 [▼
      "fav_yes" => ""
      "id" => 1440
      "name" => "Citrox 600"
      "mfg_id" => 88
    ]
    1 => array:26 [▼
      "fav_yes" => ""
      "id" => 191
      "name" => "Crackbond CSR"
      "mfg_id" => 88

    ]
    2 => array:26 [▼
      "fav_yes" => ""
      "id" => 1305
      "name" => "980 Grout & Tile Cleaner"
      "mfg_id" => 260
      "mfg_name" => "Diedrich Technologies, Inc."

    ]
"Mension" => array:199 [▼
0 => array:26 [▼
      "fav_yes" => ""
      "id" => 1361
      "name" => "C-Tar Melt"
      "mfg_id" => 260
    ]
    1 => array:26 [▼
      "fav_yes" => ""
      "id" => 1306
      "name" => "960 HD Concrete Cleaner"
      "mfg_id" => 260
]

在遍历整个数组之后,我需要显示name相对于mfg_id的总数。 预期输出为 mfg_id = 2,因为针对mfg_id 88的名称出现次数是2次 对于mfg_id 260,结果为3,因为针对该ID的名称的出现次数为3。

1 个答案:

答案 0 :(得分:0)

您可以使用array_walk_recursive来访问每个叶子,

  

注意:array_walk_recursive是具有自己作用域的核心php函数。因此,&$ r将保存迭代中保存的数据,否则它将   在每次迭代中将其重置。   换一种说法,   “按引用”表示它是为要引用的变量引用相同的分配内存块。

array_walk_recursive($arr, function ($v, $k) use (&$r) {
    if ($k == 'mfg_id') { // checking if key is mfg id
        $r[$v] = (!empty($r[$v]) ? $r[$v] : 0) + 1; // increment as per value of mfg id
    }
});

Demo

如果您需要使用array_count_values获取其每个版本,

function assc_array_count_values( $array, $key ) {
     $new_array = [];
     foreach( $array as $row ) {
         foreach($row as $temp){
            $new_array[] = $temp[$key];    
         }
     }
     return array_count_values( $new_array );
}
// count by key name 
$temp = assc_array_count_values($arr, 'mfg_id');

Demo

输出:-

Array
(
    [88] => 2
    [260] => 3
)