1

最初に 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);
?> 
4

2 に答える 2

4

通常のsort()関数はすべての値のキーを破棄するため、ソートすると、各キーは数値になります0, 1, 2, 3。したがって、を使用するksort()と、それらはすでにキーで数値的にソートされているため、何もしません。

asort()値でソートするときに、キー => 値の関連付けを維持するために使用してみてください。その後、後で使用するときksort()に、キーがまだ存在するため、そのように並べ替えることができます。

于 2012-03-23T00:52:21.250 に答える
-1

reset() 関数を使用できます。http://php.net/manual/en/function.reset.php

于 2012-03-23T00:54:25.450 に答える