Как отсортировать два ИЛИ БОЛЬШЕ массивов по порядку первого?

Предположим, у меня есть несколько массивов.

$a = array("E", "A", NULL, "D", "C");
$b = array("Dog","Cat","Horse","Bear","Zebra");
$c = array(12, 11, 20, 30, 19);

Первый массив не обязательно числовой и может содержать нули.

Я хочу отсортировать все 3 массива по порядку первого, т.е.

"A", "C", "D", "E", NULL

"Cat", "Zebra", "Bear", "Dog", "Horse"

11, 19, 30, 12, 20

Т.е. кортежи ("E", "Собака", 12), ("A", "Cat", 11), (NULL, "Horse", 20), ("D", "Bear", 30), (" С "," Зебра ", 19) должны быть сохранены.

Мне все равно, что происходит с нулевыми случаями: они могут оставаться на месте или идти в конец или в начало.

6 ответов

Решение

Вы можете использовать array_multisort для сортировки нескольких массивов на основе первого массива. См. Пример ниже

$a = array("E", "A", NULL, "D", "C");
$b = array("Dog","Cat","Horse","Bear","Zebra");
$c = array(12, 11, 20, 30, 19);

array_multisort($a, SORT_ASC, SORT_STRING, $b, $c); // $b and $c sorting based on $a
echo "<pre>";
print_r($b);
print_r($c);

Вы можете сделать это с помощью array_combine() а потом ksort():

$a = array(5, 1, 2, 4, 3);
$b = array("Dog","Cat","Horse","Bear","Zebra");

$c = array_combine($a, $b);
ksort($c);

var_dump($c);

array (size=5)
  1 => string 'Cat' (length=3)
  2 => string 'Horse' (length=5)
  3 => string 'Zebra' (length=5)
  4 => string 'Bear' (length=4)
  5 => string 'Dog' (length=3)

Использование array_combine Первый параметр принять в качестве key второй параметр принимается за value и использовать ksort отсортировать массив по ключу. наконец-то если хотите переставить ключ используйте array_values

<?php
 $a = array(5, 1, 2, 4, 3);
 $b = array("Dog","Cat","Horse","Bear","Zebra");
 $join=array_combine($a, $b);
 ksort($join);
 print_r(array_values($join));

?>

Вы можете сделать массив как

$array = array(
          '1'=>"Cat",
          '2' => 'Horse',
          '3' => 'Zebra',
          '4' => 'Bear',
          '5' => 'Dog',
      );

Это достигается с помощью array_combine($a, $b). После этого вы можете использовать ksort для объединенного массива.

Надеюсь, мой пост поможет вам. Здесь мы используем две функции array_combine а также ksort, array_combine совместим values с keys а также ksort отсортирует массив по ключу

Попробуйте этот фрагмент кода здесь

<?php
ini_set('display_errors', 1);
$a = array(5, 1, 2, 4, 3);
$b = array("Dog","Cat","Horse","Bear","Zebra");
$combined=array_combine($a, $b);
ksort($combined);
print_r($combined);

Выход:

Array
(
    [1] => Cat
    [2] => Horse
    [3] => Zebra
    [4] => Bear
    [5] => Dog
)

Попробуй это. NULL будет в начале массива.

$a = array("E", "A", NULL, "D", "C");
asort($a); // Sort array and maintain index association
echo "<pre>"; print_r($a);
$b = array("Dog","Cat","Horse","Bear","Zebra");
$c = array(12, 11, 20, 30, 19);
foreach($a as $k=>$v){
    $b1[] = $b[$k]; //you can also check with isset() whether it exist or not in this array 
    $c1[] = $c[$k];
}
echo "<pre>"; print_r($b1);
echo "<pre>"; print_r($c1);

Нажмите здесь для демонстрации

Другие вопросы по тегам