【问题标题】:Compare and replace values in array比较和替换数组中的值
【发布时间】:2014-05-31 21:56:40
【问题描述】:

我需要比较 2 个数组,第一个数组有一个顺序并且不能更改,在另一个数组中我有不同的值,第一个数组必须将他的 id 与另一个数组的 id 进行比较,如果 id 它是一样的,取值并替换为 show all in the same order

例如:

$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");

在这种情况下,我想要的结果是这样的:

"1a-dogs","2a-cats","3a-birds","4a-walking"

如果这种情况下的id 4a相同,则必须修改该条目并将其他数组的值放入并保持相同的顺序

我这样做了,但我没有得到工作:

for($fte=0;$fte<count($array_1);$fte++)
{
  $exp_id_tmp=explode("-",$array_1[$fte]);  
  $cr_temp[]="".$exp_id_tmp[0]."";  
}   


for($ftt=0;$ftt<count($array_2);$ftt++)
{
  $exp_id_targ=explode("-",$array_2[$ftt]);
  $cr_target[]="".$exp_id_targ[0]."";   
}

/// Here I tried use array_diff and others but no can get the results as i want 

我怎样才能得到这个结果?

【问题讨论】:

  • 那么您最终找到问题的答案了吗?

标签: php arrays array-difference array-intersect


【解决方案1】:

也许您可以将 array_udiff_assoc() 函数与回调一起使用

【讨论】:

    【解决方案2】:

    给你。这不是我写过的最干净的代码。

    可运行示例:http://3v4l.org/kUC3r

    <?php
    $array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
    $array_2=array("4a-walking","2a-cats");
    
    function getKeyStartingWith($array, $startVal){
        foreach($array as $key => $val){
            if(strpos($val, $startVal) === 0){
                return $key;
            }
        }
        return false;
    }
    
    function getMergedArray($array_1, $array_2){
        $array_3 = array();
        foreach($array_1 as $key => $val){
            $startVal = substr($val, 0, 2);
            $array_2_key = getKeyStartingWith($array_2, $startVal);
            if($array_2_key !== false){
                $array_3[$key] = $array_2[$array_2_key];
            } else {
                $array_3[$key] = $val;
            }
        }
        return $array_3;
    }
    
    $array_1 = getMergedArray($array_1, $array_2);
    
    print_r($array_1);
    

    【讨论】:

      【解决方案3】:

      首先将 2 个数组拆分为正确的键和值对(键 = 1a 和值 = 狗)。然后尝试遍历第一个数组并检查其每个键是否存在于第二个数组中。如果是,则替换第一个数组中第二个数组的值。最后,您的第一个数组将包含您想要的结果。

      像这样:

      $array_1 = array("1a-dogs","2a-cats","3a-birds","4a-people");
      $array_2 = array("4a-walking","2a-cats");
      
      function splitArray ($arrayInput)
      {
          $arrayOutput = array();
          foreach ($arrayInput as $element) {
              $tempArray = explode('-', $element);
              $arrayOutput[$tempArray[0]] = $tempArray[1];
          }
          return $arrayOutput;
      }
      
      $arraySplit1 = splitArray($array_1);
      $arraySplit2 = splitArray($array_2);
      
      foreach ($arraySplit1 as $key1 => $value1) {
          if (array_key_exists($key1, $arraySplit2)) {
              $arraySplit1[$key1] = $arraySplit2[$key1];
          }
      }
      
      print_r($arraySplit1);
      

      看到它在这里工作: http://3v4l.org/2BrVI

      【讨论】:

        【解决方案4】:
        $array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
        $array_2=array("4a-walking","2a-cats");
        
        function merge_array($arr1, $arr2) {
            $arr_tmp1 = array();
            foreach($arr1 as $val) {
                list($key, $val) = explode('-', $val);
                $arr_tmp1[$key] = $val;
            }
            foreach($arr2 as $val) {
                list($key, $val) = explode('-', $val);
                if(array_key_exists($key, $arr_tmp1))
                    $arr_tmp1[$key] = $val;
            }
        
            return $arr_tmp1;
        }
        
        $result = merge_array($array_1, $array_2);
        
        echo '<pre>';
        print_r($result);
        echo '</pre>';
        

        这个短代码可以正常工作,你会得到这样的结果:

        Array
        (
            [1a] => dogs
            [2a] => cats
            [3a] => birds
            [4a] => walking
        )
        

        【讨论】:

          猜你喜欢
          • 2014-04-09
          • 2015-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-07
          • 2020-03-16
          相关资源
          最近更新 更多