以复杂的方式匹配两个数组

时间:2011-10-18 11:25:09

标签: php arrays string

我有两个字符串数组。第一个数组包含旧数据,第二个数组是应该覆盖旧数组中数据的新数据。这很容易通过匹配两个数组的索引并覆盖任何不同的单元格来实现。

然而,当新数据数组的索引长度不同于旧数据时,就会出现问题。例如,如果在新数组的中间插入一个新字符串,我不希望该索引覆盖旧索引中的匹配索引。

这是一个例子来说明我正在努力实现的目标......

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

我的输出应该是

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

顺序很重要,但是“zilch”需要保持与以前相同的密钥。

2 个答案:

答案 0 :(得分:1)

你看过php手册http://php.net/manual/en/function.array-merge.php

中的array_merge()吗?
array_merge($myoldarray, $mynewarray);

答案 1 :(得分:0)

如果您必须保留索引,对于数值数组,您可以使用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;
              }

         }
    }
}
祝你好运!