如何对字符串数组的子字符串进行排序

时间:2013-10-06 15:24:00

标签: php string sorting

我有一个像这样的字符串数组:

array
    0 => string 'cheese=french'
    1 => string 'pizza=large&cheese=french'
    2 => string 'cheese=french&pizza=small'
    3 => string 'cheese=italian'

我需要按字母顺序对数组中字符串中的每个子字符串(除以&)进行排序。例如: pizza = large& cheese = French应该是另一种方式:cheese = french& pizza = large,因为'c'出现在'p'之前。

我以为我可以像这样爆炸原始阵列:

foreach ($urls as $url)
{
    $exploded_urls[] = explode('&',$url);
}

array
    0 => array
        0 => string 'cheese=french'
    1 => array
        0 => string 'pizza=large'
        1 => string 'cheese=french'
    2 => array
        0 => string 'cheese=french'
        1 => string 'pizza=small'
    3 => array
        0 => string 'cheese=italian'

然后在foreach循环中使用sort,如:

foreach($exploded_urls as $url_to_sort)
{
    $sorted_urls[] = sort($url_to_sort);
}

但是当我这样做时,它只会返回:

array
    0 => boolean true
    1 => boolean true
    2 => boolean true
    3 => boolean true
    4 => boolean true

最多:

    14 => boolean true

当我这样做的时候:

foreach($exploded_urls as $url_to_sort)
{
    sort($url_to_sort);
}

我得到了一个数组,排序:

array
    0 => string 'cheese=dutch'
    1 => string 'pizza=small'

正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

sort函数返回一个布尔值,以显示它是否成功。在你的行中:

$sorted_urls[] = sort($url_to_sort);

您要将sort(true或false)的返回值赋给$ sorted_urls数组。你不需要这样做 - sort会修改你调用它的数组,所以不要试图将结果分配给一个新数组,只需调用sort然后查看排序数组的$ url_to_sort。

来自sort的文档:

$fruits = array("lemon", "orange", "banana", "apple");
    sort($fruits);
    foreach ($fruits as $key => $val) {
        echo "fruits[" . $key . "] = " . $val . "\n";
    }

以上示例将输出:

fruits [0] = apple

fruits [1] =香蕉

fruits [2] = lemon

fruits [3] = orange

答案 1 :(得分:0)

sort返回一个布尔值(实际上没用)并进行就地排序。代码可以像

一样简单
// note iteration by reference
foreach($exploded_urls as &$url_to_sort){
    sort($url_to_sort);
}

在此循环之后,$exploded_urls的每个元素都将被排序。