2017-10-18 3 views
0

私はこのような配列を持っています。私が必要とするのは、marketplace = trueのすべての行を上に移動することです。ソート

私はこれを試してみましたが、作品はありません:

usort($f, function($a, $b) { 
    if ($a['marketplace'] || $b['marketplace']) { 
    return 1; 
    } 
    return 0; 
}); 
+0

意味しますかtrue 'は'緊急= false'の前に来るべきですか? – halfer

答えて

0

はこれを試してみてください:

usort($f, function($a, $b) { 
    if ($a['marketplace'] == $b['marketplace']) { 
    return 0; 
    } 
    return $a['marketplace'] ? 1 : -1; 
}); 
0
<?php 
$data=[ 
    ['id'=> 1, 'urgent'=> true, 'marketplace'=> false], 
    ['id'=> 2, 'urgent'=> true, 'marketplace'=> true], 
    ['id'=> 3, 'urgent'=> false, 'marketplace'=> false], 
    ['id'=> 3, 'urgent'=> false, 'marketplace'=> true], 
    ['id'=> 3, 'urgent'=> false, 'marketplace'=> false], 
    ['id'=> 3, 'urgent'=> false, 'marketplace'=> true], 
    ['id'=> 3, 'urgent'=> false, 'marketplace'=> false], 
]; 

echo"<pre>"; 
//print_r($data); 


$trueArray=array(); 
$falseArray=array(); 
$i=0; 
foreach($data as $row){ 
    if($row['marketplace']==true){ 
     $trueArray[$i]=$row; 
    } 
    else{ 
     $falseArray[$i]=$row; 
    } 
    $i++; 
} 

//print_r($trueArray); 
//print_r($falseArray); 

$result=array_merge($trueArray,$falseArray); 
print_r($result); 

は、より有効なテストのためのいくつかのより多くの値を追加しました。出力は次のとおりです。

Array 
(
    [0] => Array 
     (
      [id] => 2 
      [urgent] => 1 
      [marketplace] => 1 
     ) 

    [1] => Array 
     (
      [id] => 3 
      [urgent] => 
      [marketplace] => 1 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [urgent] => 
      [marketplace] => 1 
     ) 

    [3] => Array 
     (
      [id] => 1 
      [urgent] => 1 
      [marketplace] => 
     ) 

    [4] => Array 
     (
      [id] => 3 
      [urgent] => 
      [marketplace] => 
     ) 

    [5] => Array 
     (
      [id] => 3 
      [urgent] => 
      [marketplace] => 
     ) 

    [6] => Array 
     (
      [id] => 3 
      [urgent] => 
      [marketplace] => 
     ) 

) 

marketplace trueのフィールドは新しい配列の上にあります。

-1

あなたの条件を組み合わせて試してみてください:あなたは `marketplace`がurgent``よりも高いソート優先順位を持っていますが、同じ `marketplace`値、`緊急を=持つ二つのアイテムの場合と

usort($arr, function ($a, $b) { 
    return ($a['urgent'] || $b['urgent']) && ($a['marketplace'] || $b['marketplace']); 
});