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

Php 以复杂的方式匹配两个数组,php,arrays,string,Php,Arrays,String,我有两个字符串数组。第一个数组包含旧数据,第二个数组是新数据,应该覆盖旧数组中的数据。这可以通过匹配两个数组的索引并覆盖任何不同的单元格来轻松实现 但是,当新数据数组的索引长度与旧数据数组的索引长度不同时,就会出现问题。例如,如果在新数组的中间插入一个新字符串,我不希望该索引覆盖旧数组中的匹配索引 这里有一个例子来说明我要完成的任务 myoldarray("foobar", "blah", "zilch") mynewarray("foobar", "blah", "watcha", "zilc

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

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

这里有一个例子来说明我要完成的任务

myoldarray("foobar", "blah", "zilch")
mynewarray("foobar", "blah", "watcha", "zilch")
我的输出应该是

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

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

您看过php手册中的array_merge()了吗


如果必须保留索引,那么对于数值数组,可以使用它来获取差异,然后将其添加到数组的相同位置。如果这个索引已经存在,我们只需将旧值&索引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;
              }

         }
    }
}

祝你好运

我没有在这里跟踪你。你希望它的输出是什么?旧的数组+‘watcha’?在您的示例中会有什么结果?另外,如果您有
myoldarray(“foobar”、“blah”、“zilch”)
mynewarray(“foobar”、“blah”、“watcha”)
,会发生什么?我已经用这些问题的答案更新了原始问题。array\u diff不返回数组吗?所以,当你试图将$value与$diff进行比较时,这是行不通的,是吗?另外,array_key_的存在需要两个参数,不是吗?是的,你是对的,这是我直接写出来的。现在用您的示例阵列对其进行测试并使其正常工作:)玩得开心!这成功地将“watcha”放入了旧数组的正确索引中,但我需要一种方法使“zilch”仍然具有与以前相同的可引用键,因为还有其他数据希望它是相同的。这就是我自己尝试这样做的原因——我无法让有序键工作,所以我尝试使用唯一生成的键,但我需要能够在以后从头开始重新创建数组,并使每个索引具有与以前相同的键。希望这是有意义的:我刚刚尝试了新的数组,输入为数组(“foobar”、“baah”、“baah”、“watcha”、“zilch”);它在结尾加了好几次“zilch”。老实说,我不知道你的代码是如何工作的-我想我需要坐下来好好想想你在用它做什么。谢谢你的帮助Dan。。。我已经对我的问题做了很多思考,现在我要把它带到一个完全不同的方向。
$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;
              }

         }
    }
}