2015-12-16 4 views
0

У меня есть два массива, которые должны отражать один и тот же порядок, основанный на одном конкретном значении. Мой первый массив, $array1, представляет собой серию целых чисел, и мне нужны вторичные массивы в $array2, которые имеют те же самые целые числа, что и значение (вместе с целым рядом других данных, которые я остановил здесь для краткости), чтобы повторно отсортированы для отражения порядка целых чисел в $array1.PHP - Сортировка массива на основе определенного ключа

В настоящее время у меня есть:

$array1 = array(
    [0] => 19, 
    [1] => 15, 
    [2] => 18, 
    [3] => 20 
); 

$array2 = array (
    [0] => array (
     [0] => 20, 
     [1] => 'Some other data.' 
    ), 
    [1] => array (
     [0] => 18, 
     [1] => 'Some other data.' 
    ), 
    [2] => array (
     [0] => 19, 
     [1] => 'Some other data.' 
    ), 
    [3] => array (
     [0] => 15, 
     [1] => 'Some other data.' 
    ) 
); 

Желаемая сортировкой $array2:

$array2 = array (
    [0] => array (
     [0] => 19, 
     [1] => 'Some other data.' 
    ), 
    [1] => array (
     [0] => 15, 
     [1] => 'Some other data.' 
    ), 
    [2] => array (
     [0] => 18, 
     [1] => 'Some other data.' 
    ), 
    [3] => array (
     [0] => 20, 
     [1] => 'Some other data.' 
    ) 
) 

ответ

0

В этом случае вы должны использовать uasort()

function cmp($a, $b) { 
    $posA = array_search($a[0], $array1); 
    $posB = array_search($b[0], $array1); 

    if ($posA == $posB) { 
     return 0; 
    } 
    return ($posA < $posB) ? -1 : 1; 
} 

uasort($array2, 'cmp'); 

Но это будет медленно ...

0
// make order in form "what => place" 
$flip = array_flip($array1); 

$new = array(); 
foreach($array2 as $key=>$item) { 
    $i = $item[0]; 
    $new[$flip[$i]] = $item; 
} 

demo on eval.in

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