0

データを含む2つの配列があり、2つを比較して最終的な配列を1つ作成する必要があります..これが私の状況です:

// 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;

だから私は2つの配列を持っています..次のように:

    $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
            )

    )

これらの 2 つの配列を比較する必要があります。一番上の配列に存在し、2 番目の配列 (Github クローン) に存在しないものがある場合は、それを削除する必要があります。一番上の配列 (古い) に存在しない一番下の配列に存在するものがある場合は、それを追加する必要があります。新しいデータを含む 3 番目の配列が必要になると思いますが、これを構造化する方法がわかりません。

また、両方の配列 (MagentoPlayground) に 2 つのエントリがある場合、下の配列のデータを使用するには新しい配列が必要です。一番下の配列には、最新の last_modified スタンプとディレクトリ サイズがあります。

助けてくれてありがとう。

4

1 に答える 1

2

あなたが今言及したルールを使用して比較します:

  • A には存在するが B には存在しない -> 削除
  • B には存在するが A には存在しない -> 追加

...そして、3 つ目の最後の配列を作成します。最初のルールにより、配列 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;
}

?>

これらの 2 つのルールだけから、2 番目の配列を取得するだけでよいように思えます。これは、両方の配列に存在する場合はそのままであり、B に存在しない場合は削除するためですが、とにかく存在しないためです。 B に存在するが A に存在しない場合は追加しますが、既に存在しています...

上記のように m_array_key_exists を使用して、array_key_exists() よりも 1 レベル深いレベルで、配列キーが配列内に存在するかどうかを確認します。ルールが思ったほど単純でない場合は、2 番目の配列をループし、配列キーをチェックし、特別なルールを適用して、結果を 3 番目の配列に追加するように思えます。

于 2013-10-01T00:47:52.057 に答える