PHP 按数值合并两个数组

PHP merging two arrays by Numeric Value

我有两个数组。

$array1 :

Array (
  [0] => Array (
      [time] => 100
      [text] => Hello
  )
  [1] => Array (
      [time] => 200
      [text] => World!
  )
  [3] => Array (
      [time] => 300
      [text] => Array1's There
  )
)

还有更多...

$array2 :

Array (
  [0] => Array (
      [time] => 50
      [text] => Hello
  )
  [1] => Array (
      [time] => 150
      [text] => World!
  )
  [3] => Array (
      [time] => 300
      [text] => Array2's There
  )
)

还有更多...

$desiredResult :

Array (
  [0] => Array (
      [time] => 50
      [text] => Hello
  )
  [1] => Array (
      [time] => 100
      [text] => Hello
  )
  [2] => Array (
      [time] => 150
      [text] => World
  )
  [3] => Array (
      [time] => 200
      [text] => World
  )
  [4] => Array (
      [time] => 300
      [text] => Array1's There
  )
  [5] => Array (
      [time] => 300
      [text] => Array2's There
  )
)

我需要按时间的数值合并两个数组,如果时间的值相同,则Array1的数据优先。

用下面的代码你会得到你想要的结果。

$finalArray = array();
if(count($array1) == count($array2)){
  for ($icount = 0; $icount < count($array1); $icount++) {
    if( ($array1[$icount] < $array2[$icount]) || ($array1[$icount] == $array2[$icount])){
      $finalArray[] = $array1[$icount];
      $finalArray[] = $array2[$icount];
    } else if($array1[$icount] > $array2[$icount]){
      $finalArray[] = $array2[$icount];
      $finalArray[] = $array1[$icount];
    }
  }
}

我还创建了一个函数,如果任何数组包含的值比其他数组多,它可以为您提供结果。

function mapArray($array1, $array2, $minCount, $maxCount, $maxCountFrom = ''){
  for ($icount = 0; $icount < $minCount; $icount++) {
    if( ($array1[$icount] < $array2[$icount]) || ($array1[$icount] == $array2[$icount])){
      $finalArray[] = $array1[$icount];
      $finalArray[] = $array2[$icount];
    } else if($array1[$icount] > $array2[$icount]){
      $finalArray[] = $array2[$icount];
      $finalArray[] = $array1[$icount];
    }
  }

  if(!empty($maxCountFrom)){
    if($maxCountFrom == '1'){
      for ($jcount = $icount; $jcount < $maxCount; $jcount++) {
        $finalArray[] = $array1[$jcount];
      }
    } else if($maxCountFrom == '2'){
      for ($jcount = $icount; $jcount < $maxCount; $jcount++) {
        $finalArray[] = $array2[$jcount];
      }
    }
  }
  return $finalArray;
}

$array1Count = count($array1);
$array2Count = count($array2);
if($array1Count > $array2Count){
  $result = mapArray($array1, $array2, $array2Count, $array1Count, '1');
} elseif($array1Count < $array2Count){
  $result = mapArray($array1, $array2, $array1Count, $array2Count, '2');
} elseif($array1Count == $array2Count){
  $result = mapArray($array1, $array2, $array2Count, $array2Count);
}

在这个函数里你可以通过minimummaximum来传递2 arraycount of the both array,最后一个参数是定义哪个array has maximum value并从该数组中获取所有剩余值到 final array.