我正在创建一个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。
答案 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
}
});
如果您需要使用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
)