【问题标题】:Combine 2 arrays only if their key index match仅当它们的键索引匹配时才合并 2 个数组
【发布时间】:2015-10-30 14:06:14
【问题描述】:

我想合并这个数组:

$arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
$arr2 = array(1 => 5, 3 => 7, 4 => 9);

我想要这个:

$arr3 = array("a" => 5, "c" => 7, d => 9);

我想忽略 $arr1 上的键索引“2”,因为它在 $arr2 上不存在。

所以,我只想在键索引匹配的情况下组合,只组合具有相同原始键的值。

【问题讨论】:

  • 你有没有尝试过?
  • $res = []; foreach($arr2 as $k => $v){ $res[$arr1[$k]] = $v; }

标签: php arrays


【解决方案1】:

给你。

<?php
$arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
$arr2 = array(1 => 5, 3 => 7, 4 => 9);
$arr3 = array();
foreach ($arr1 as $key => $value) {
    if(isset($arr2[$key])){
        $arr3[$value] = $arr2[$key];
    }
}

print_r($arr3);
?>

【讨论】:

    【解决方案2】:

    试试这个:

    $arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
    $arr2 = array(1 => 5, 3 => 7, 4 => 9);
    $result = array_combine(array_intersect_key($arr1, $arr2), $arr2);
    

    产生:

    Array
    (
        [a] => 5
        [c] => 7
        [d] => 9
    )
    

    【讨论】:

      【解决方案3】:

      你会做这样的事情,它没有经过测试,但我认为它会起作用。 @Adrian 所说的看起来更好。我没有使用 foreach($array 作为 $key=>$val)。这样更好。

      //first merge all arrays into one (if you want)
      $data = array_merge($arr1, $arr2);
      $bucket = array();
      $ignored = array('2', '3', '4') //array indexes to ignore
      
      foreach($data as $item)
      {
          if(in_array($item[$ignored]))
          {
              continue;
          }
          else
          {
              array_merge($bucket, $item);
          }
      }
      

      【讨论】:

        【解决方案4】:

        你可以试试这样的:

        function combineArrays( $array1, $array2 ){
            $array3 = array();
            foreach ($array1 as $key => $value) {
        
                if( isset($array2[$key]) ) { $array3[$value] = $array2[$key]; }
        
            }
        
            return $array3;
        }
        

        像这样使用它:

        $arr3 = combineArrays($arr1, $arr2);
        

        【讨论】:

          【解决方案5】:

          试试这个..

          使用“array_key_exists”

           $arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
          $arr2 = array(1 => 5, 3 => 7, 4 => 9);
          
          foreach($arr1 as $key=>$value)
          {
          if (array_key_exists($key, $arr2)) {
          $arr3[$value]=$arr2[$key];
          }
          }
          
          print_r($arr3);
          

          数组([a] => 5 [c] => 7 [d] => 9)

          【讨论】:

            【解决方案6】:

            使用array_key_exists的简单方法:

            $arr1 = 数组(1 => "a", 2 => "b", 3 => "c", 4 => "d");

            $arr2 = 数组(1 => 5, 3 => 7, 4 => 9);

            $new = array();
            foreach ($arr2 as $key => $value) {
                 if(array_key_exists($key, $arr1)) {
                     $array[$arr1[$key]] = $arr2[$key];
                 }
            }
            
             print_r($array);
            

            数组([a] => 5 [c] => 7 [d] => 9)

            【讨论】:

            • 循环通过 $arr2 会更合乎逻辑。在这种情况下无关紧要,但在更大的数组中会更有效。
            • 嗨@Christian,你说得对,在这种情况下更合乎逻辑,我更新了我的答案,谢谢。
            猜你喜欢
            • 1970-01-01
            • 2019-07-25
            • 2020-01-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-17
            相关资源
            最近更新 更多