2017-10-11 3 views
0

je ce tableau:PHP Tri Tableau Multidimensional Échec

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

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

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

) 

et j'ai ce code pour trier ce tableau basé sur 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>'; 
} 

le résultat ne fonctionne pas comme je m'y attendais, parce que id=85 placé avant id=83:

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

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

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

) 

pourquoi PHP a placé avec succès le id=36 comme première valeur du tableau, mais n'a pas pu trier id=85 et

merci.

+1

strcmp ($ a [ 'id'], $ b [ 'id']), étiez-vous en utilisant le tableau? – tan

Répondre

2

changement

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

à

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

Vous pouvez utiliser comme cette

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

Et obtenir une sortie comme ci-dessous

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; 

Placez l'ID comme clé dans votre tableau, puis utilisez multisort. Ça va marcher.

0

Il est juste une doublure

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

Vous trouverez ici aussi: http://php.net/manual/en/function.array-multisort.php

recherche "array_column" sur cette page de manuel.

J'ai utilisé ce à tester:

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

Et le résultat est la suivante:

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