[英]PHP - Comparing two multidimensional arrays
我有两个包含数据的数组,我需要比较两个数组并创建一个最终数组..这是我的情况:
// grab a list of the folders
$folders = glob("../*",GLOB_ONLYDIR);
// create empty array's which will contain our data
$projects_data = array();
$folders_array = array();
// list the contents of the config file
$data = json_decode(file_get_contents('.my-config'), true);
// loop through our data file
foreach($data['web_app']['projects'] as $project) :
// update our projects data array
$projects_data[] = $project;
endforeach;
// loop through each folder on our localhost
foreach($folders as $folder) :
// update our folders array
$folders_array[] = array(
'folder' => basename($folder),
'last_modified' => filemtime($folder),
'dir_size' => dirsize($folder)
);
endforeach;
所以我有两个数组..像这样:
$projects_data array
Array
(
[0] => Array
(
[folder] => GitHub Clones
[last_modified] => 1379974689
[dir_size] => 6148
)
[1] => Array
(
[folder] => MagentoPlayground
[last_modified] => 1380336582
[dir_size] => 82340978
)
[2] => Array
(
[folder] => Projects
[last_modified] => 1380581312
[dir_size] => 5954
)
)
$folders_array array
Array
(
[0] => Array
(
[folder] => MagentoPlayground
[last_modified] => 1380336582
[dir_size] => 82340978
)
[1] => Array
(
[folder] => Projects
[last_modified] => 1380581312
[dir_size] => 5933
)
[2] => Array
(
[folder] => old
[last_modified] => 1371064970
[dir_size] => 63385844
)
)
我需要比较这两个数组。如果顶部数组中存在一个数组,而第二个数组(Github Clones)中不存在,则需要删除它。 如果底部数组中存在一个,而顶部数组(旧)中不存在,则需要添加它。 我想我将需要带有新数据的第三个数组,但是我不确定如何构造它。
另外,如果两个数组(MagentoPlayground)中都有两个条目,则我需要新数组来使用底部数组中的数据。 底部的数组将具有最新的last_modified标记和目录大小。
谢谢你的帮助。
我将使用您刚才提到的规则进行比较:
...并创建第三个也是最后一个数组。 由于第一个规则,您不妨通过数组B作为比较来解决该问题。
<?php
// multidimensional array key search (one deep)
function m_array_key_exists($key, $array) {
foreach($array as $subkey => $subvalue) {
if($subkey === $key)
return true;
if(is_array($subvalue)){
if(array_key_exists($key, subvalue))
return true;
}
}
return false;
}
?>
仅从这两个规则看来,您也可以只使用第二个数组,因为如果两个数组中都存在第二个数组,则可以保留它;如果B中不存在,则将其删除,但无论如何都不会删除它,并且如果它存在于B中但不存在于A中,则添加它,但它已经存在...
如上所示,使用m_array_key_exists来检查比array_key_exists()更深的一级,如所示,数组中是否存在数组键。 如果您的规则不像我想象的那么简单,听起来像您想遍历第二个数组,检查数组键,应用特殊规则并将结果添加到第三个数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.