2017-10-11 31 views
0

我有此数组:PHP排序多维数组失败

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

谢谢。

+1

的strcmp($ A [ '身份证'],$ B [ '身份证']),是你使用数组? – tan

回答

2

变化

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

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

您可以使用这样

$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 
     ) 

) 
0
$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置于阵列中,然后使用multisort。它会工作。

0

这仅仅是一个内衬

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