Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果条件为true,则对上移的PHP数组进行排序_Php - Fatal编程技术网

如果条件为true,则对上移的PHP数组进行排序

如果条件为true,则对上移的PHP数组进行排序,php,Php,我有这样一个数组: [ [id: 1, urgent: true, marketplace: false], [id: 2, urgent: true, marketplace: true], [id: 3, urgent: false, marketplace: false] ] 数组的顺序是(默认)的,顶部有emergency。我需要的是向上移动所有具有marketplace=true的行 我尝试过这个,但不起作用: usort($f, function($a, $b) {

我有这样一个数组:

[
  [id: 1, urgent: true, marketplace: false],
  [id: 2, urgent: true, marketplace: true],
  [id: 3, urgent: false, marketplace: false]
]
数组的顺序是(默认)的,顶部有
emergency
。我需要的是向上移动所有具有
marketplace=true
的行

我尝试过这个,但不起作用:

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

usort($f, function($a, $b) {
  if ($a['marketplace'] == $b['marketplace']) {
    return 0;
  }
  return $a['marketplace'] ? 1 : -1;
});

marketplace为true的字段位于新数组的顶部。

尝试结合您的条件:


您的意思是说
市场
的排序优先级高于
紧急
,但如果两个项目具有相同的
市场
值,
紧急=真
应位于
紧急=假
之前?
<?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] => 
        )

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