PHP объединяет два массива по числовому значению

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

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

и больше …

$ requiredResult:

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

Решение

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

$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 считать и maximum считать, и последний параметр должен определить, какой array has maximum value и из этого массива извлеките все оставшиеся значения в final array,

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector