PHP - Как отсортировать один и тот же массив несколько раз? - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь создать простой скрипт, который сначала поместит функцию 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 ]

4 голосов
/ 23 марта 2012

Обычная функция sort() уничтожает клавиши для всех значений, поэтому при сортировке каждая клавиша теперь числовая 0, 1, 2, 3.Поэтому, когда вы используете ksort(), он ничего не делает, потому что они уже отсортированы по ключу.

Попробуйте использовать asort() для сохранения связи ключ => при сортировке по значению.Затем, когда вы используете ksort() позже, ключи все еще существуют, поэтому вы можете сортировать таким образом.

0 голосов
/ 23 марта 2012

Вы можете использовать функцию сброса (). http://php.net/manual/en/function.reset.php

...