0

我有两个包含数据的数组,我需要比较两者并创建一个最终数组。这是我的情况:

// 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 克隆)中不存在,那么我需要将其删除。如果底部数组中存在一个顶部数组(旧)中不存在的数组,那么我需要添加它。我想我需要带有新数据的第三个数组,但我不确定如何构造它。

此外,如果两个数组(MagentoPlayground)中有两个条目,我需要新数组来使用底部数组中的数据。底部数组将具有最新的 last_modified 标记和目录大小。

谢谢你的帮助。

4

1 回答 1

2

我将使用您刚刚提到的规则进行比较:

  • 存在于 A 但不存在于 B -> 删除
  • 存在于 B 但不存在于 A -> 添加

...并创建第三个也是最后一个数组。由于第一条规则,您也可以遍历数组 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() 更深一层的数组键是否存在于数组中,如您所示。如果你的规则不像我想象的那么简单,听起来你想遍历第二个数组,检查数组键,应用你的特殊规则并将结果添加到第三个数组。

于 2013-10-01T00:47:52.057 回答