0

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

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'

这样做的正确方法是什么?

4

2 回答 2

1

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

$sorted_urls[] = sort($url_to_sort);

您将排序的返回值(真或假)分配给 $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";
    }

上面的示例将输出:

水果[0] = 苹果

水果[1] = 香蕉

水果[2] = 柠檬

水果[3] = 橙子

于 2013-10-06T15:33:24.103 回答
0

sort返回一个布尔值(这实际上是无用的)并就地进行排序。代码可以很简单

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

在这个循环之后,每个元素$exploded_urls都会被排序。

于 2013-10-06T15:27:58.260 回答