PHP - Как отсортировать один и тот же массив несколько раз?
Я пытаюсь создать простой скрипт, который сначала поместит функцию array(), чтобы я мог вызывать ее несколько раз для сортировки. Вот как выглядит мой массив:
// I want this inside of a function so I can call on it:
$a = array(
15 => "C",
12 => "E",
11 => "B",
19 => "P",
10 => "L",
14 => "N",
20 => "A"
);
// This is how I brought it into a function and formatted it:
function original_array($a){
foreach($a as $key => $types) {
print $key . " " . ":" . " " . $types . "<br />";
}
}
Затем мне просто нужно вызвать original_array(), и он распечатывается нормально, но если я отсортирую его один раз, я не смогу снова его отсортировать. Он просто распечатает первый вид:
// Print out array is is:
original_array();
// Then I print out array with sort():
sort($a);
original_array($a);
// But if I try and sort it again with different sort it doesn't work:
ksort($a);
original_array($a);
Что я делаю неправильно? Я немного новичок в PHP, поэтому ваша помощь очень ценится.
ОБНОВИТЬ://
Это то, что я в итоге сделал. Я должен был прочитать о функции сортировки немного более тщательно. Я не знал, что он уничтожил оригинальные указатели.
<?php
// Original array:
$a = array(
15 => "C",
12 => "E",
11 => "B",
19 => "P",
10 => "L",
14 => "N",
20 => "A"
);
// Array for sort() function:
$b = $a
function print_format($array){
foreach($array as $key => $types) {
print $key . " " . "=>" . " " . $types . "<br />";
}
}
print "Original";
print_format($a);
print "sort()";
sort($b);
print_format($b);
print "ksort()";
ksort($a);
print_format($a);
print "asort()";
asort($a);
print_format($a);
print "krsort()";
krsort($a);
print_format($a);
print "rsort()";
rsort($b);
print_format($b);
print "arsort()";
arsort($a);
print_format($a);
?>
2 ответа
Нормальный sort()
Функция уничтожает ключи для всех значений, поэтому при сортировке каждая клавиша теперь числовая 0, 1, 2, 3
, Поэтому, когда вы используете ksort()
, это ничего не делает, потому что они уже численно отсортированы по ключу.
Попробуйте использовать asort()
поддерживать связь ключ => значение при сортировке по значению. Затем, когда вы используете ksort()
позже ключи все еще существуют, поэтому вы можете сортировать их таким образом.
Вы можете использовать функцию сброса (). http://php.net/manual/en/function.reset.php