比较多维数组的值

时间:2016-06-10 08:55:25

标签: php arrays

$data = [];
$data['set1'] = ['label1'=>'001', 'label2'=>'002'];
$data['set2'] = ['label1'=>'003', 'label2'=>'004'];
$data['set3'] = ['label1'=>'001', 'label2'=>'006'];
$data['set4'] = ['label1'=>'001', 'label2'=>'002'];

我想检查labelx中任何setx的值是否相同。我能想到的只是运行foreach循环来比较一组与其余组合,一次一组。

是否有任何优雅的解决方案可以检查所有集合中的类似值而无需手动执行循环?

1 个答案:

答案 0 :(得分:1)

array_column()array_count_values()可以解决问题。

首先使用 array_column 将列值作为数组获取,然后使用 array_count_values 在数组中查找相同的值。

像这样:

<?php

$data = [];
$data['set1'] = ['label1'=>'001', 'label2'=>'002'];
$data['set2'] = ['label1'=>'003', 'label2'=>'004'];
$data['set3'] = ['label1'=>'001', 'label2'=>'006'];
$data['set4'] = ['label1'=>'001', 'label2'=>'002'];

$label1_values=array_column($data,'label1');
$label2_values=array_column($data,'label2');

print_r(array_count_values($label1_values));
print_r(array_count_values($label2_values));

?>

<强>输出:

Array
(
    [001] => 3
    [003] => 1
)
Array
(
    [002] => 2
    [004] => 1
    [006] => 1
)