【问题标题】:PHP - How to sort the same array multiple times?PHP - 如何多次对同一个数组进行排序?
【发布时间】:2012-03-23 00:48:50
【问题描述】:

我正在尝试制作一个简单的脚本,该脚本首先将 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);
?> 

【问题讨论】:

    标签: php arrays sorting ksort


    【解决方案1】:

    普通的sort() 函数会破坏所有值的键,因此在排序时,每个键现在都是数字0, 1, 2, 3。因此,当您使用ksort() 时,它什么也不做,因为它们已经按数字键排序了。

    在按值排序时尝试使用asort() 来保持键=> 值关联。然后当您稍后使用ksort() 时,键仍然存在,因此您可以按这种方式排序。

    【讨论】:

    • 这帮助很大。 sort() 函数通过我关闭。我不明白为什么其他人在工作,但如果 sort() 在他们之前,他们就不会。
    【解决方案2】:

    您可以使用 reset() 函数。 http://php.net/manual/en/function.reset.php

    【讨论】:

    • 我已经尝试过重置。它可能是我放置它的地方,但它不起作用。
    • 我的答案被某人签名为未使用。但我只提供了我的选择。你能用 $b=$a;并且在每次 sort($b) 之后再次使用 ($b=$a) 调用 $a,因此 $a 将保持原样。
    • 效果很好!因此,通过将其分配给所述的新变量 ($b = $a) 基本上会创建一个未修改的新数组?
    • 好的。但由于负面指向,我失去了一些分数。请接受我的回答。
    猜你喜欢
    • 2012-12-07
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2011-02-11
    • 2021-07-02
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多