php 对包含查询字符串的平面数组进行排序,以便对键进行重新排序

wfypjpf4  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(107)

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

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=法式奶酪&pizza=大号披萨,因为“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'

我想要的结果:

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

m1m5dgzv1#

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";
    }

上面的示例将输出:
水果[0] =苹果
香蕉[1]
水果[2] =柠檬
水果[3] =橙子

bmvo0sr5

bmvo0sr52#

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

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

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

cwdobuhd

cwdobuhd3#

如果你知道你正在处理查询字符串,不要仅仅使用explode();使用为任务设计的解析工具--parse_str()
解析字符串后,按键对关联数组进行排序,然后使用http_build_query()将数据返回到其原始形式。
代码:(Demo

$queryStrings = [
    'cheese=french',
    'pizza=large&cheese=french',
    'cheese=french&pizza=small',
    'cheese=italian',
];

var_export(
    array_map(
        function($qs) {
            parse_str($qs, $result);
            ksort($result);
            return http_build_query($result);
        },
        $queryStrings
    )
);

相关问题