Rumah > Soal Jawab > teks badan
Contohnya adalah seperti berikut:
Operasi sebenar ialah tatasusunan tiga dimensi dan jumlah data agak besar.
$a = [
['name'=>'jack', 'jantina'=>'lelaki'],
['umur'=>18,'negara'=>'China']
];
$b = [
['country'=>'China','age'=>18],
['jantina'=>'lelaki','name'=>'jack']
];
Selain melintasi dan membandingkan, adakah terdapat cara yang cepat dan berkesan?
Idea semasa saya ialah untuk mengisih tatasusunan mengikut peraturan yang sama dahulu, dan kemudian menggunakan pengesahan md5 selepas json_encoding. Namun, nampaknya pengasingan tidak dapat dilaksanakan dengan baik pada masa ini.
Saya tertanya-tanya sama ada anda mempunyai sebarang kaedah yang baik?
大家讲道理2017-05-16 13:14:54
//Hanya terpakai pada tatasusunan bersekutu semata-mata
fungsi deep_ksort(&$arr) {
ksort($arr);
foreach ($arr as &$a) {
if (is_array($a) && !empty($a)) {
deep_ksort($a);
}
}
}
deep_ksort($a);
deep_ksort($b);
if(json_encode($a) == json_encode($b)){
echo "两个数组相同";
}
//Kaedah umum
//Fungsi ini menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi
fungsi multiToSingle($arr, $delimiter = '->',$key = ' ') {
$resultAry = array();
if (!(is_array($arr) && count($arr)>0)) {
return false;
}
foreach ($arr AS $k=>$val) {
$k = is_numeric($k) ? 0 :$k; //若键是数字,则统一为0,避免索引不同导致数组的不同
$newKey = trim($key . $k . $delimiter);
if (is_array($val) && count($val)>0) {
$resultAry = array_merge($resultAry, multiToSingle($val, $delimiter, $newKey));
} else {
$resultAry[] = $newKey . $val;
}
}
return $resultAry;
}
//Hakim sama ada dua tatasusunan adalah kongruen
fungsi hakim($a,$b)
{
$single_A = multiToSingle($a);
$single_B = multiToSingle($b);
$arr1 = array_diff($single_A,$single_B);
$arr2 = array_diff($single_B,$single_A);
jika(kosong($arr1) && kosong($arr2)){
echo "两数组全等";
}lain{
echo "不全等";
};
}
迷茫2017-05-16 13:14:54
Anda boleh lihat http://bbs.csdn.net/topics/36 ini..., ia sepatutnya berguna kepada anda!
天蓬老师2017-05-16 13:14:54
Ia sangat mudah selepas mengisih mengikut peraturan yang sama, tukar tatasusunan kepada rentetan dan bandingkan sama ada dua rentetan itu sama.
PHP中文网2017-05-16 13:14:54
$a = [
['name' => 'jack', 'gender' => 'male'],
['age' => 18, 'country' => 'China']
];
$b = [
['country' => 'China', 'age' => 18],
['gender' => 'male', 'name' => 'jack']
];
function whetherDifferent($ele, $differentEle)
{
$toSingleArr = function ($target)use(&$toSingleArr){
//转换为一维数组的代码
return $target;
};
$ele=$toSingleArr($ele);
$differentEle=$toSingleArr($differentEle);
ksort($ele,true);
ksort($differentEle,true);
return $ele===$differentEle;
}
var_dump(whetherDifferent($a, $b));
die;