2013-07-27 2 views
0

У меня есть этот массив $arr1Сортировка массива в соответствии с первым массивом

Array 
(
    [0] => [col1] 
    [1] => [col2] 
    [2] => [col3] 
) 

У меня есть еще один массив $arr2 в

Array 
(
    [0] => Array 
     (
      [col3] => data1 
      [col2] => data2 
      [col1] => data3 
     ) 

    [1] => Array 
     (
      [col2] => data1 
      [col3] => data2 
      [col1] => data3 
     ) 
) 

мне нужно отсортировать этот $arr2 ключи как col1, col2 и col3 вроде как на $arr1.

Я пробовал с array_multisort($arr1,$arr2) и в другую сторону. Ничего не получилось. любая помощь по этому поводу?

+0

Я думаю, что вам придется написать свою собственную функцию сортировки, но мне любопытно узнать, есть ли лучшие решения – Mangiucugna

+0

возможный дубликат [Ссылка: все основные способы сортировки массивов и данных в PHP] (http://stackoverflow.com/вопросы/17364127/ссылка-все-основные-путь к так rt-arrays-and-data-in-php) – deceze

ответ

0

Вы можете сделать это с помощью uksort и закрытия (PHP 5.3+)

foreach($arr2 as &$array){ 
    uksort($array,function($a,$b) use ($arr1){ 
     return array_search($a, $arr1) - array_search($b, $arr1); 
    }); 
} 
+0

ваш алгоритм имеет 'n * n * n * log (n)' сложность. n - длина первого массива. –

0
foreach ($arr2 as $k => &$arr) { 
    ksort($arr); 
} 
print_r($arr2); 

Используйте ksort с петлей foreach со значением, переданным по ссылке.

+0

Мне нужно отсортировать $ arr2, а не $ arr1. –

+0

['ksort'] (http://php.net/manual/function.ksort.php), как и любые другие * на месте * сортировки в php, возвращают логическое значение, указывающее на успех. Таким образом, вы переписываете '$ arr'. – Yoshi

+0

и $ arr2 нужно заказывать, используя информацию, исходящую от $ arr1 – Mangiucugna

2

Использование цикла.

$keys = array_values($arr1); 
$out = array(); 
foreach($arr2 as $ar){ 
    $outar = array(); 
    foreach($keys as $k){ 
     if(isset($ar[$k])){ 
      $outar[$k]=$ar[$k]; 
     } 
    } 
    $out[]=$outar; 
} 

Выходной массив будет проходить в $out. См. ideone.

+0

Не существует foreach..in loop in php. Это должно быть foreach..as – smm

+0

@smm вы правы. Использование слишком большого количества python в наши дни. Забыть PHP. Добавлена ​​ссылка ideone, которая показывает, что она работает. –

+0

ваш значительно эффективнее. – Orangepill

0

, если значения первого массива являются точно же, как и индексов второго, попробуйте

$resarr = array(); 
foreach ($arr2 as $somearr) { 
    $i = 0; 
    $newarr = array(); 
    foreach ($somearr as $value) { 
     $newarr[$arr1[$i]] = $value; 
     $i++; 
    } 
    $resarr[] = $newarr; 
} 
$arr1 = $resarr; 
Смежные вопросы