2017-02-17 6 views
0

Я хочу выскочить из array2 и захотеть нажать массив. Но согласно некоторым обычным требованиям.pop и push из одного ассоциативного массива в другой массив

Сейчас в array1 есть readingOrder 1-й ключ является 1 и readingOrder 2-й ключ является 4.

Так я хочу, чтобы подтолкнуть между этим двумя ключа из первых двух key.And же процесса array2 для всех остальных.

и мой последний массив должен быть как array3.

например, в массиве 1 ключ [0] чтениеОбраз 1 и ключ [1] 4. Теперь я хочу нажать еще два ключа из массива2. для Array1 ключа [2] порядок чтения является 6. поэтому перед этим ключом я хочу выдвинуть еще один ключ от массив2 и та же для дальнейшего ...

array1, как ниже

Array 
(
    [0] => Array 
     (
      [readingOrder] => 1 
      [id] => 78 
     ) 

    [1] => Array 
     (
      [readingOrder] => 4 
      [id] => 76 
     ) 

    [2] => Array 
     (
      [readingOrder] => 6 
      [id] => 80 
     ) 

) 

array2 как ниже

Array 
(
    [0] => Array 
     (
      [id] => 81 
      [readingOrder] => 2 
     ) 

    [1] => Array 
     (
      [id] => 82 
      [readingOrder] => 5 
     ) 

    [2] => Array 
     (
      [id] => 84 
      [readingOrder] => 7 
     ) 

    [3] => Array 
     (
      [id] => 85 
      [readingOrder] => 8 
     ) 

    [4] => Array 
     (
      [id] => 86 
      [readingOrder] => 9 
     ) 

    [5] => Array 
     (
      [id] => 87 
      [readingOrder] => 10 
     ) 

    [6] => Array 
     (
      [id] => 88 
      [readingOrder] => 11 
     ) 

) 

Выходной array3:

Array 
(
    [0] => Array 
     (
      [readingOrder] => 1 
      [id] => 78 
     ) 

    [1] => Array 
     (
      [id] => 81 
      [readingOrder] => 2 
     ) 

    [2] => Array 
     (
      [id] => 82 
      [readingOrder] => 5 
     ) 

    [3] => Array 
     (
      [readingOrder] => 4 
      [id] => 76 
     ) 

    [4] => Array 
     (
      [id] => 84 
      [readingOrder] => 7 
     ) 

    [5] => Array 
     (
      [readingOrder] => 6 
      [id] => 80 
     ) 

    [6] => Array 
     (
      [id] => 85 
      [readingOrder] => 8 
     ) 

    [7] => Array 
     (
      [id] => 86 
      [readingOrder] => 9 
     ) 

    [8] => Array 
     (
      [id] => 87 
      [readingOrder] => 10 
     ) 

    [9] => Array 
     (
      [id] => 88 
      [readingOrder] => 11 
     ) 

) 

Спасибо ..

+1

Как выглядят ваши предыдущие попытки получить правильный результат? Более конкретно, какую именно проблему вы пытаетесь решить? – GordonM

+0

@ GordonM Я редактирую свой вопрос. Пожалуйста, прочитайте сейчас. –

+1

Вы не понимали, что задал @GordonM, вопрос: зачем вам это нужно? (а также * Не могли бы вы показать свои попытки решить проблему?) –

ответ

0

Вы можете сделать это с usort. Прежде всего, необходимо объединить массивы:

$a1 = [ 
    [ 
     'readingOrder' => 1, 
     'id' => 78 
    ], 
    [ 
     'readingOrder' => 4, 
     'id' => 76 
    ], 
    [ 
     'readingOrder' => 6, 
     'id' => 80 
    ] 
]; 
$a2 = [ 
    [ 
     'readingOrder' => 2, 
     'id' => 81 
    ], 
    [ 
     'readingOrder' => 5, 
     'id' => 82 
    ], 
    [ 
     'readingOrder' => 7, 
     'id' => 84 
    ], 
    [ 
     'readingOrder' => 8, 
     'id' => 85 
    ] 
]; 

$a3 = array_merge($a1, $a2); 

Тогда вам нужно использовать usort:

usort($a3, function($a,$b) { 
    if ($a['readingOrder'] == $b['readingOrder']) return 0; 
    return $a['readingOrder'] < $b['readingOrder'] ? -1 : 1; 
}); 

В PHP 7 вы можете использовать оператор космического корабля, который позволит сделать код более чистым. Как так:

usort($a3, function($a,$b) { 
    return $a[0] <=> $b[0]; 
}); 

Это будет возвращать:

(
    [0] => Array 
     (
      [readingOrder] => 1 
      [id] => 78 
     ) 

    [1] => Array 
     (
      [readingOrder] => 2 
      [id] => 81 
     ) 

    [2] => Array 
     (
      [readingOrder] => 4 
      [id] => 76 
     ) 

    [3] => Array 
     (
      [readingOrder] => 5 
      [id] => 82 
     ) 

    [4] => Array 
     (
      [readingOrder] => 6 
      [id] => 80 
     ) 

    [5] => Array 
     (
      [readingOrder] => 7 
      [id] => 84 
     ) 

    [6] => Array 
     (
      [readingOrder] => 8 
      [id] => 85 
     ) 

) 
+0

Это не то, что он спросил. –

+0

@CasimiretHippolyte Мой плохой тогда. Должен сказать, что не совсем ясно, к чему он стремится. –

+1

Желаемый результат ясен, но причина, по которой он хочет это сделать, - глубокая тайна. –

1

Вы можете построить массив так:

$current = 1; 
$arr3 = []; 
while ($arr1 && $arr2) { 
    if ($arr1[0]['readingOrder'] > $current) 
     $arr3[] = array_shift($arr2); 
    else 
     $arr3[] = array_shift($arr1); 
    $current++; 
} 

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

print_r($arr3); 

Обратите внимание, что этот код является разрушительным для $arr1 и $arr2. Если вы хотите сохранить их, скопируйте их раньше и используйте копии.

+0

Большое спасибо. Это точно соответствует моему требованию. –

Смежные вопросы