0

次のような文字列の配列があります。

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

配列内の文字列の各部分文字列 (& で分割) をアルファベット順に並べ替える必要があります。たとえば、「c」が「p」の前に来るため、「pizzeria=large&cheese=french」は「cheese=french&pizza=large」と逆にする必要があります。

次のように元の配列を分解できると思いました:

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

並べ替えられた配列の 1 つを取得します。

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

これについて正しい方法は何ですか?

4

2 に答える 2

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

上記の例では、次のように出力されます。

果物[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 に答える