I compare these two arrays:
$ array1:
array(3) {
[0]=>
array(10000) {
["12345"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(46) "monkey.jpg"
["path"]=>
string(149) "Volumes/animals/monkey.jpg"
["size"]=>
string(7) "2650752"
}
["678790"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "elephant.jpg"
["path"]=>
string(171) "Volumes/animals/elephant.jpg"
["size"]=>
string(7) "2306688"
}
["23123"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "fred.jpg"
["path"]=>
string(171) "Volumes/animals/fred.jpg"
["size"]=>
string(7) "2306688"
}
}
[1]=>
array(10000) {
["624245"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(46) "duck.jpg"
["path"]=>
string(149) "Volumes/animals/duck.jpg"
["size"]=>
string(7) "2650752"
}
["934522"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "lora.jpg"
["path"]=>
string(171) "Volumes/animals/lora.jpg"
["size"]=>
string(7) "2306688"
}
["832452"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "sam.jpg"
["path"]=>
string(171) "Volumes/animals/sam.jpg"
["size"]=>
string(7) "2306688"
}
}
[2]=>
array(1500) {
["234214"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(46) "chi.jpg"
["path"]=>
string(149) "Volumes/animals/chi.jpg"
["size"]=>
string(7) "2650752"
}
["942134"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "ape.jpg"
["path"]=>
string(171) "Volumes/animals/ape.jpg"
["size"]=>
string(7) "2306688"
}
["234234"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "cat.jpg"
["path"]=>
string(171) "Volumes/animals/cat.jpg"
["size"]=>
string(7) "2306688"
}
}
}
$ array2:
array(3) {
[0]=>
array(10000) {
["12345"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(46) "monkei.jpg"
["path"]=>
string(149) "Volumes/animals/monkey.jpg"
["size"]=>
string(7) "2650752"
}
["678790"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "elephant.jpg"
["path"]=>
string(171) "Volumes/animals/elephant.jpg"
["size"]=>
string(7) "2306688"
}
["23123"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "fred.jpg"
["path"]=>
string(171) "Volumes/animals/fred.jpg"
["size"]=>
string(7) "2306688"
}
}
[1]=>
array(10000) {
["624245"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(46) "duck.jpg"
["path"]=>
string(149) "Volumes/animals/duck.jpg"
["size"]=>
string(7) "2650752"
}
["934522"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "lora.jpg"
["path"]=>
string(171) "Volumes/animals/lora.jpg"
["size"]=>
string(7) "2306688"
}
["832452"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "sam.jpg"
["path"]=>
string(171) "Volumes/animals/sam.jpg"
["size"]=>
string(7) "2306688"
}
}
[2]=>
array(1500) {
["234214"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(46) "chi.jpg"
["path"]=>
string(149) "Volumes/animals/chi.jpg"
["size"]=>
string(7) "2650752"
}
["942134"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "ape.jpg"
["path"]=>
string(171) "Volumes/animals/ape.jpg"
["size"]=>
string(7) "2306688"
}
["234234"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "cat.jpg"
["path"]=>
string(171) "Volumes/animals/cat.jpg"
["size"]=>
string(7) "2306688"
}
}
}
我将它们与此功能进行比较:
function array_diff_assoc_recursive($array1, $array2){
foreach($array1 as $key => $value){
if(is_array($value)){
if(!isset($array2[$key])){
$difference[$key] = $value;
}
elseif(!is_array($array2[$key])){
$difference[$key] = $value;
}
else{
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if($new_diff != FALSE)
{
$difference[$key] = $new_diff;
}
}
}
elseif(!isset($array2[$key]) || $array2[$key] != $value){
$difference[$key] = $value;
}
}
return !isset($difference) ? 0 : $difference;
}
echo "<pre>";
print_r(array_diff_assoc_recursive($array1, $array2));
echo "</pre>";
结果是:
array(1) {
[0]=>
array(1) {
["12345"]=>
array(1) {
["fileName"]=>
string(46) "monkey.jpg"
}
}
}
但我需要的是无论区别在哪里,我都需要始终在阵列中的路径。我尝试将$value["path"]
添加到数组$difference
,但实际上并不知道该怎么做。
我需要的结果是:
array(1) {
[0]=>
array(1) {
["12345"]=>
array(2) {
["fileName"]=>
string(46) "monkey.jpg"
["path"]=>
string(46) "Volumes/animals/monkey.jpg"
}
}
}
答案 0 :(得分:1)
试试这个
function array_diff_assoc_recursive($array1, $array2){
foreach($array1 as $key => $value){
if(is_array($value)){
if(!isset($array2[$key])){
$difference[$key] = $value;
$difference['path'] = $value['path'];
}
elseif(!is_array($array2[$key])){
$difference[$key] = $value;
$difference['path'] = $value['path'];
}
else{
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if($new_diff != FALSE)
{
$difference[$key] = $new_diff;
$difference['path'] = $new_diff['path'];
}
}
}
elseif(!isset($array2[$key]) || $array2[$key] != $value){
$difference[$key] = $value;
}
}
return !isset($difference) ? 0 : $difference;
}
echo "<pre>";
print_r(array_diff_assoc_recursive($array1, $array2));
echo "</pre>";
答案 1 :(得分:1)
我改变了你的功能,现在它按预期工作:
efunction array_diff_assoc_recursive($array1, $array2){
foreach($array1 as $key => $value){
if(is_array($value)){
if(!isset($array2[$key])){
$difference[$key] = $value;
}
elseif(!is_array($array2[$key])){
$difference[$key] = $value;
}
else{
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if($new_diff != FALSE)
{
$difference[$key] = $new_diff;
}
}
}
elseif(!isset($array2[$key]) || $array2[$key] != $value){
$difference[$key] = $value;
$difference['path'] = $array1['path']; // added this feature here
}
}
return !isset($difference) ? 0 : $difference;
}