2016-06-10 121 views
-2
$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

爲什麼沒有它似乎正確的?你也許可以使用像'array_search'或'array_find'這樣的函數,我會一直忘記),但對於像這樣的特定情況,無論如何你仍然需要一個循環。 – GolezTrol

+0

不清楚,'labelx'?你想檢查每個標籤1到每個lebel2嗎? – 2016-06-10 09:01:10

+3

問了587個問題,仍然不知道如何提出明確的問題? – Thamilan

回答

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 
)