Сложно сопоставить два массива - PullRequest
0 голосов
/ 18 октября 2011

У меня есть два массива строк.Первый массив содержит старые данные, а второй массив - новые данные, которые должны перезаписывать данные в старом массиве.Это легко сделать, сопоставив индексы двух массивов и переписав все ячейки, которые отличаются.

Однако проблема возникает, когда массив новых данных имеет длину индексов, отличную от старой.Например, если одна новая строка вставлена ​​в середину нового массива, я не хочу, чтобы этот индекс перезаписывал соответствующий индекс в старом.

Вот пример, иллюстрирующий то, что я пытаюсьчтобы выполнить ...

myoldarray("foobar", "blah", "zilch")
mynewarray("foobar", "blah", "watcha", "zilch")

Мой вывод должен быть

finalarray("foobar", "blah", "watcha", "zilch")

Порядок важен, однако «zilch» должен поддерживать тот же ключ, что и раньше.

Ответы [ 2 ]

1 голос
/ 18 октября 2011

вы смотрели array_merge () из руководства по php http://php.net/manual/en/function.array-merge.php

array_merge($myoldarray, $mynewarray);
0 голосов
/ 18 октября 2011

Если вам необходимо сохранить индекс, для числовых массивов вы можете использовать array_compare , чтобы получить разницу, а затем добавить ее в той же позиции массива. Если этот индекс уже существует, мы просто перемещаем старое значение и ключ индекса 1 выше. Я надеюсь, что это то, что вы хотите сделать

$difference = array_diff($newarr,$oldarr);
foreach($difference as $diff)
{
    foreach($newarr as $key => $value) 
    {
         if($value == $diff) 
         {
              if(array_key_exists($key,$oldarr)) 
              { 
                  $oldkey = count($oldarr)-1;
                  for($i=count($oldarr);$i>$key;$i--) 
                  {
                      $oldarr[$oldkey+1] = $oldarr[$oldkey]; 
                  }
                  $oldarr[$key] = $value;
              }
              else 
              {
                  $oldarr[$key] = $value;
              }

         }
    }
}

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...