PHP объединяет два массива по числовому значению - PullRequest
0 голосов
/ 05 января 2019

У меня есть два массива.

$ 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
  )
)

и более ...

$ требуемый результат:

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.

1 Ответ

0 голосов
/ 05 января 2019

С кодом ниже вы получите желаемый результат.

$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);
}

В этой функции вы можете передать 2 array, count of the both array на minimum count и maximum count, а последний параметр - определить, какой array has maximum value и из этого массива извлекают все оставшиеся значения в final array.

...