PHP和订购带有数字和文本的数组项

时间:2017-02-19 17:58:31

标签: php arrays

我正在使用PHP。我有一个有1-256项的阵列。这是一个例子:

$arr[] = "(1.) Ben";
$arr[] = "Albert";
$arr[] = "Bill";
$arr[] = "(2.) Paul";
$arr[] = "(5.) Martin";
$arr[] = "(12.) Mike";
$arr[] = "(20.) John";

问题1:

我想按名称按字母顺序排列这些项目。所以,结果应该是这样的:

Albert
(1.) Ben
Bill
(20.) John
(5.) Martin
(12.) Mike
(2.) Paul

问题2:

我也想按照这样的方式订购1)数字和2)名称:

(1.) Ben
(2.) Paul
(5.) Martin
(12.) Mike
(20.) John
Albert
Bill

我怎么能用PHP做这个工作?

3 个答案:

答案 0 :(得分:0)

php得到了排序函数:asort()按值排序,ksort()按键排序。

asort($arr); // now sorted by value.
ksort($arr); // now sorted by key.

答案 1 :(得分:0)

它为Question 1排序:

<?php

$arr[] = "(1.) Ben";
$arr[] = "Albert";
$arr[] = "Bill";
$arr[] = "(2.) Paul";
$arr[] = "(5.) Martin";
$arr[] = "(12.) Mike";
$arr[] = "(20.) John";

usort($arr, function($a, $b){
    $a = explode(' ', $a, 2);
    $a = (count($a) > 1) ? $a[1] : $a[0];

    $b = explode(' ', $b, 2);
    $b = (count($b) > 1) ? $b[1] : $b[0];

    return strcmp($a, $b);
});

print_r($arr); //  // Print array sorted for 'Question 1'

<强> @EDIT 并为Question 2排序:

$arr[] = "(1.) Ben";
$arr[] = "Albert";
$arr[] = "Bill";
$arr[] = "(2.) Paul";
$arr[] = "(5.) Martin";
$arr[] = "(12.) Mike";
$arr[] = "(20.) John";

usort($arr, function($a, $b){
    $a = explode(' ', $a, 2);
    $b = explode(' ', $b, 2);

    if(count($a) > 1 && count($b) > 1)
    {
        $a = str_replace(['(', ')', '.'], '', $a[0]);
        $b = str_replace(['(', ')', '.'], '', $b[0]);

        return $a > $b;
    }
    else
    {
        return strcmp($a[0], $b[0]);
    }
});

print_r($arr); // Print array sorted for 'Question 2'

答案 2 :(得分:0)

当您使用索引数组时,您可以通过asort()函数按字母顺序排序,但对于另一个问题,您必须创建一个函数,即。您想要排序然后应用uasort()函数的顺序。链接是php.net/manual/en/functions.uasort.php检查以上链接你可能会明白