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
Php 按两个参数对数组中的数组排序?时光与喧嚣_Php_Arrays_Sorting - Fatal编程技术网

Php 按两个参数对数组中的数组排序?时光与喧嚣

Php 按两个参数对数组中的数组排序?时光与喧嚣,php,arrays,sorting,Php,Arrays,Sorting,我在一个数组中有许多数组,我想通过两个参数对数组中的数组进行排序。这两个参数一方面是true或false,另一方面是unix时间戳。以下是一个例子: array(3) => { array(3) { ["Sticky"]=> bool(true) ["Timestamp"]=> int(1507696669) ["Title"]=> string(12) "TestArtikel2" } array(3) { ["Sticky"]=> bool(f

我在一个数组中有许多数组,我想通过两个参数对数组中的数组进行排序。这两个参数一方面是true或false,另一方面是unix时间戳。以下是一个例子:

array(3) => {
    array(3) { ["Sticky"]=> bool(true) ["Timestamp"]=> int(1507696669) ["Title"]=> string(12) "TestArtikel2" } 
    array(3) { ["Sticky"]=> bool(false) ["Timestamp"]=> int(1507696645) ["Title"]=> string(12) "TestArtikel1" } 
    array(3) { ["Sticky"]=> bool(true) ["Timestamp"]=> int(1507688257) ["Title"]=> string(4) "Home" }
}
我想按最新的时间戳排序。而且,我希望所有包含true的数组在false数组之前排序。最后应该是这样的:

 array(3) => {
    array(3) { ["Sticky"]=> bool(true) ["Timestamp"]=> int(1507696669) ["Title"]=> string(12) "TestArtikel2" }  
    array(3) { ["Sticky"]=> bool(true) ["Timestamp"]=> int(1507688257) ["Title"]=> string(4) "Home" }
    array(3) { ["Sticky"]=> bool(false) ["Timestamp"]=> int(1507696645) ["Title"]=> string(12) "TestArtikel1" }
}
我现在的问题是,我该怎么做?对不起,我几乎不知道

这个不行:

亲切问候

使用

以下是您的代码:

$arr = array(
            array(0=>TRUE,1=>1507696669,2=>"TestArtikel2"),
            array(0=>FALSE,1=>1507696645,2=>"TestArtikel1"),
            array(0=>TRUE,1=>1507688257,2=>"Home")
        );

var_dump($arr); // your array

foreach ($arr as $key => $row) {
    $bool[$key]  = $row[0];
    $time[$key] = $row[1];
}

array_multisort($bool, SORT_DESC, $time, SORT_DESC, $arr);

var_dump($arr); // Check your sorted array

我得到的输出与您想要的相同:

array (size=3)
  0 => 
    array (size=3)
      0 => boolean true
      1 => int 1507696669
      2 => string 'TestArtikel2' (length=12)
  1 => 
    array (size=3)
      0 => boolean false
      1 => int 1507696645
      2 => string 'TestArtikel1' (length=12)
  2 => 
    array (size=3)
      0 => boolean true
      1 => int 1507688257
      2 => string 'Home' (length=4)


array (size=3)
  0 => 
    array (size=3)
      0 => boolean true
      1 => int 1507696669
      2 => string 'TestArtikel2' (length=12)
  1 => 
    array (size=3)
      0 => boolean true
      1 => int 1507688257
      2 => string 'Home' (length=4)
  2 => 
    array (size=3)
      0 => boolean false
      1 => int 1507696645
      2 => string 'TestArtikel1' (length=12)
更新


我认为首先你需要像这个问题一样设置密钥:为什么使用数组的数组而不是对象的数组,并且可以使用类来代替?特别是:你得到的是相同的数组吗?我得到了一个完美的。我也分享了我的输出。我用代码更新了我的问题。错误在哪里?您不需要分配,只需使用该函数,数组将自动更新。试试我最新的答案。
$arr = array(
                array(0=>TRUE,1=>1507696669,2=>"TestArtikel2"),
                array(0=>FALSE,1=>1507696645,2=>"TestArtikel1"),
                array(0=>TRUE,1=>1507688257,2=>"Home")
            );

var_dump($arr); // your array

array_multisort(array_column($arr, 0), SORT_DESC, array_column($arr, 1), SORT_DESC, $arr);

var_dump($arr); // Check your sorted array
array (size=3)
  0 => 
    array (size=3)
      0 => boolean true
      1 => int 1507696669
      2 => string 'TestArtikel2' (length=12)
  1 => 
    array (size=3)
      0 => boolean false
      1 => int 1507696645
      2 => string 'TestArtikel1' (length=12)
  2 => 
    array (size=3)
      0 => boolean true
      1 => int 1507688257
      2 => string 'Home' (length=4)


array (size=3)
  0 => 
    array (size=3)
      0 => boolean true
      1 => int 1507696669
      2 => string 'TestArtikel2' (length=12)
  1 => 
    array (size=3)
      0 => boolean true
      1 => int 1507688257
      2 => string 'Home' (length=4)
  2 => 
    array (size=3)
      0 => boolean false
      1 => int 1507696645
      2 => string 'TestArtikel1' (length=12)
 $allNews = array(
                    array("Sticky"=>TRUE,"Timestamp"=>1507696669,"Title"=>"TestArtikel2"),
                    array("Sticky"=>FALSE,"Timestamp"=>1507696645,"Title"=>"TestArtikel1"),
                    array("Sticky"=>TRUE,"Timestamp"=>1507688257,"Title"=>"Home")
                );

        var_dump($allNews);

        array_multisort(array_column($allNews, "Sticky"), SORT_DESC, array_column($allNews, "Timestamp"), SORT_DESC, $allNews);

       foreach($allNews as $article){
           var_dump($article);
           echo "<br>";
       }
       // var_dump($allNews);