2013-10-01 7 views
0

У меня есть два массива с данными в них, и мне нужно сравнить два и создать один финальный массив .. вот моя ситуация:PHP - Сравнение двух многомерных массивов

// 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), мне нужен новый массив для использования данных из нижнего массива. Нижний массив будет иметь самую последнюю актуальную марку и размер каталога.

Спасибо за любую помощь.

+2

Вы должны прочитать эту и другие функции родственников http://php.net/manual/en/function.array-diff.php –

ответ

2

Я бы сравнить с использованием правил, вы только что упомянул:

  • Существует в А, но не в B -> удалить
  • Exists в B, но не в А -> добавить

... и создать третий и последний массив. Из-за первого правила вы можете также провести цикл через массив 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(), существует ли массив в массивах как вы показали. Если ваши правила не так просты, как я думал, они звучат для меня так, как будто вы хотите пройти через ваш второй массив, проверить ключи массива, применить специальные правила и добавить результат в третий массив.

Смежные вопросы