Как отсортировать два ИЛИ БОЛЬШЕ массивов по порядку первого?
Предположим, у меня есть несколько массивов.
$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);