PHP:返回多维数组中某些值的计数,但保留其他值,如id
我有一个二维数组,非常大,变化很大,但结构如下:PHP:返回多维数组中某些值的计数,但保留其他值,如id,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个二维数组,非常大,变化很大,但结构如下: array 0 => array 'id' => string '6' 'name' => string 'Adams Clasp' 1 => array 'id' => int 185 'name' => string 'Acrylic' 2 => array 'id' => strin
array
0 =>
array
'id' => string '6'
'name' => string 'Adams Clasp'
1 =>
array
'id' => int 185
'name' => string 'Acrylic'
2 =>
array
'id' => string '268'
'name' => string 'Adams Clasp (Splints)'
3 =>
array
'id' => int 11
'name' => string 'Arrow Clasp'
4 =>
array
'id' => int 11
'name' => string 'Arrow Clasp'
5 =>
array
'id' => string '0'
'name' => string 'Labial Bow'
6 =>
array
'id' => string '6'
'name' => string 'Adams Clasp'
7 =>
array
'id' => string '6'
'name' => string 'Adams Clasp'
我希望得到类似于在数组上调用array\u count\u values()
的输出,如果它不是多维的/只是键和name
,除了保留关联的'id'
作为值并保持多维。在此示例中,输出应如下所示:
array
'Adams Clasp' =>
array
'id' => string '6'
'count' => int 3
'Acrylic' =>
array
'id' => int 185
'count' => int 1
'Adams Clasp (Splints)' =>
array
'id' => string '268'
'count => int 1
'Arrow Clasp' =>
array
'id' => int 11
'count' => int 2
'Labial Bow' =>
array
'id' => string '0'
'count' => int 1
我正在运行
php5.6
一个正确构造的foreach循环就可以完成这个任务。首次找到名称时,将其设置为键,并为其声明默认子数组(id
和count
=0
)。然后只需增加每次出现的计数值
代码:()
输出:
array (
'Adams Clasp' =>
array (
'id' => '6',
'count' => 3,
),
'Acrylic' =>
array (
'id' => 185,
'count' => 1,
),
'Adams Clasp (Splints)' =>
array (
'id' => '268',
'count' => 1,
),
'Arrow Clasp' =>
array (
'id' => 11,
'count' => 2,
),
'Labial Bow' =>
array (
'id' => '0',
'count' => 1,
),
)
一个正确构造的foreach循环就可以做到这一点。首次找到名称时,将其设置为键,并为其声明默认子数组(
id
和count
=0
)。然后只需增加每次出现的计数值
代码:()
输出:
array (
'Adams Clasp' =>
array (
'id' => '6',
'count' => 3,
),
'Acrylic' =>
array (
'id' => 185,
'count' => 1,
),
'Adams Clasp (Splints)' =>
array (
'id' => '268',
'count' => 1,
),
'Arrow Clasp' =>
array (
'id' => 11,
'count' => 2,
),
'Labial Bow' =>
array (
'id' => '0',
'count' => 1,
),
)
Variant使用数组函数:
$array = [
['id' => '6','name' => 'Adams Clasp'],
['id' => 185,'name' => 'Acrylic'],
['id' => '268','name' => 'Adams Clasp (Splints)'],
['id' => 11,'name' => 'Arrow Clasp'],
['id' => 11,'name' => 'Arrow Clasp'],
['id' => '0','name' => 'Labial Bow'],
['id' => '6','name' => 'Adams Clasp'],
['id' => '6','name' => 'Adams Clasp'],
];
$ids = array_column($array , 'name' , 'id');
array_map(function($count , $id , $name)use(&$out){
$out[$name] = ['id' => $id, 'count' => $count];
} , array_count_values(array_column($array , 'name')) , array_keys($ids),array_values($ids));
print_r($out);
Variant使用数组函数:
$array = [
['id' => '6','name' => 'Adams Clasp'],
['id' => 185,'name' => 'Acrylic'],
['id' => '268','name' => 'Adams Clasp (Splints)'],
['id' => 11,'name' => 'Arrow Clasp'],
['id' => 11,'name' => 'Arrow Clasp'],
['id' => '0','name' => 'Labial Bow'],
['id' => '6','name' => 'Adams Clasp'],
['id' => '6','name' => 'Adams Clasp'],
];
$ids = array_column($array , 'name' , 'id');
array_map(function($count , $id , $name)use(&$out){
$out[$name] = ['id' => $id, 'count' => $count];
} , array_count_values(array_column($array , 'name')) , array_keys($ids),array_values($ids));
print_r($out);