簡體   English   中英

PHP排序多維數組失敗

[英]PHP Sorting Multidimensional Array Failed

我有這個數組:

Array
(
    [0] => Array
        (
            [id] => 83
            [value] => Figures
        )

    [1] => Array
        (
            [id] => 85
            [value] => Toys
        )

    [2] => Array
        (
            [id] => 36
            [value] => Nintendo Switch
        )

)

而且我有這段代碼根據id對那個數組進行排序:

function cmp($a, $b) {
    return strcmp($a->id, $b->id);
}

while ($row = $result->fetch_assoc()) {

    $category = json_decode($row['product_cat'], true);

    usort($category, "cmp");

    echo '<pre>';
    print_r($category);
    echo '</pre>';
}

結果無法正常工作,因為id=85放在id=83之前:

Array
(
    [0] => Array
        (
            [id] => 36
            [value] => Nintendo Switch
        )

    [1] => Array
        (
            [id] => 85
            [value] => Toys
        )

    [2] => Array
        (
            [id] => 83
            [value] => Figures
        )

)

為什么PHP成功將id=36放置為數組的第一個值,但未能對id=85id=83進行排序

謝謝。

更改

return strcmp($a->id, $b->id);

return strcmp($a['id'], $b['id']);

你可以這樣使用

$mylist = array(array("id"=>83,"value"=>"Figures"),array("id"=>85,"value"=>"Toys"),array("id"=>36,"value"=>"Nintendo Switch"));

echo "<pre>";

$sort = array();
foreach($mylist as $k=>$v) {
    $sort['id'][$k] = $v['id'];
    $sort['value'][$k] = $v['value'];
}
# sort by event_type desc and then title asc
array_multisort($sort['id'], SORT_ASC, $sort['value'], SORT_ASC,$mylist);

print_r($mylist);

並獲得如下輸出

Array
(
    [0] => Array
        (
            [id] => 36
            [value] => Nintendo Switch
        )

    [1] => Array
        (
            [id] => 83
            [value] => Figures
        )

    [2] => Array
        (
            [id] => 85
            [value] => Toys
        )

)
$category = array ([
        'id' => 36,
        'value' => 'Nintendo Switch'
], [
        'id' => 85,
        'value' => 'Toys'
], [
        'id' => 83,
        'value' => 'Figures'
]);

$sortArry = [];
foreach ($category as $c) {
    $sortArry[$c['id']] = $c;
}

echo '<pre>';
print_r($sortArry);
array_multisort($sortArry);
print_r($sortArry);
exit;

將id作為鍵放在您的數組中,然后使用多排序。 它會工作。

這只是一個班輪

array_multisort( array_column($yourArray, "id"), SORT_ASC, $yourArray );

您也可以在這里找到它: http : //php.net/manual/en/function.array-multisort.php

在該手冊頁上搜索“ array_column”。

我用它來測試:

$yourArray = array (
"0" => Array
    (
        "id" => 83,
        "value" => "Figures"
    ),
"1" => Array
    (
        "id" => 85,
        "value" => "Toys"
    ),
"2" => Array
    (
        "id" => 36,
        "value" => "Nintendo Switch"
    )
);

array_multisort( array_column($yourArray, "id"), SORT_ASC, $yourArray );
print_r($yourArray);

結果是這樣的:

Array ( [0] => Array ( [id] => 36 [value] => Nintendo Switch ) 
        [1] => Array ( [id] => 83 [value] => Figures ) 
        [2] => Array ( [id] => 85 [value] => Toys ) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM