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

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