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);