Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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,我有一个多维数组,如: [ { "C":[ { "status":"0", "num":"3223" }, { "status":"1", "num":"45186" }, { "status":"2", "num":"8310"

我有一个多维数组,如:

[
   {
      "C":[
         {
            "status":"0",
            "num":"3223"
         },
         {
            "status":"1",
            "num":"45186"
         },
         {
            "status":"2",
            "num":"8310"
         },
         {
            "status":"3",
            "num":"82"
         }
      ]
   },
   {
      "F":[
         {
            "status":"0",
            "num":"1506"
         },
         {
            "status":"1",
            "num":"31253"
         },
         {
            "status":"2",
            "num":"1660"
         },
         {
            "status":"5",
            "num":"1017"
         }
      ]
   },
   {
      "A":[
         {
            "status":"0",
            "num":"1506"
         },
         {
            "status":"1",
            "num":"31253"
         },
         {
            "status":"2",
            "num":"1660"
         },
         {
            "status":"5",
            "num":"1017"
         }
      ]
   },
]
我想根据键(
C
F
A
)等对其进行排序。我曾考虑使用
foreach
编写自己的选择排序方法,但我确信这不是一个很好的方法。我也可以使用
ksort()
usort()
,但不确定如何使用

我不需要任何人为我写完整的代码,请告诉我如何对这样的数组进行排序是最好的方法,我将不胜感激

上面的字符串实际上是数组的
json\u encode()
dump

以下是
var\u dump()

上面有漂亮的印刷品

array(6) {
  [0] =>
  array(1) {
    'C' =>
    array(8) {
      [0] =>
      array(2) {
        ...
      }
      [1] =>
      array(2) {
        ...
      }
      [2] =>
      array(2) {
        ...
      }
      [3] =>
      array(2) {
        ...
      }
      [4] =>
      array(2) {
        ...
      }
      [5] =>
      array(2) {
        ...
      }
      [6] =>
      array(2) {
        ...
      }
      [7] =>
      array(2) {
        ...
      }
    }
  }
  [1] =>
  array(1) {
    'F' =>
    array(8) {
      [0] =>
      array(2) {
        ...
      }
      [1] =>
      array(2) {
        ...
      }
      [2] =>
      array(2) {
        ...
      }
      [3] =>
      array(2) {
        ...
      }
      [4] =>
      array(2) {
        ...
      }
      [5] =>
      array(2) {
        ...
      }
      [6] =>
      array(2) {
        ...
      }
      [7] =>
      array(2) {
        ...
      }
    }
  }
  [2] =>
  array(1) {
    'A' =>
    array(8) {
      [0] =>
      array(2) {
        ...
      }
      [1] =>
      array(2) {
        ...
      }
      [2] =>
      array(2) {
        ...
      }
      [3] =>
      array(2) {
        ...
      }
      [4] =>
      array(2) {
        ...
      }
      [5] =>
      array(2) {
        ...
      }
      [6] =>
      array(2) {
        ...
      }
      [7] =>
      array(2) {
        ...
      }
    }
  }
  [3] =>
  array(1) {
    'D' =>
    array(8) {
      [0] =>
      array(2) {
        ...
      }
      [1] =>
      array(2) {
        ...
      }
      [2] =>
      array(2) {
        ...
      }
      [3] =>
      array(2) {
        ...
      }
      [4] =>
      array(2) {
        ...
      }
      [5] =>
      array(2) {
        ...
      }
      [6] =>
      array(2) {
        ...
      }
      [7] =>
      array(2) {
        ...
      }
    }
  }
  [4] =>
  array(1) {
    'E' =>
    array(8) {
      [0] =>
      array(2) {
        ...
      }
      [1] =>
      array(2) {
        ...
      }
      [2] =>
      array(2) {
        ...
      }
      [3] =>
      array(2) {
        ...
      }
      [4] =>
      array(2) {
        ...
      }
      [5] =>
      array(2) {
        ...
      }
      [6] =>
      array(2) {
        ...
      }
      [7] =>
      array(2) {
        ...
      }
    }
  }
  [5] =>
  array(1) {
    'B' =>
    array(8) {
      [0] =>
      array(2) {
        ...
      }
      [1] =>
      array(2) {
        ...
      }
      [2] =>
      array(2) {
        ...
      }
      [3] =>
      array(2) {
        ...
      }
      [4] =>
      array(2) {
        ...
      }
      [5] =>
      array(2) {
        ...
      }
      [6] =>
      array(2) {
        ...
      }
      [7] =>
      array(2) {
        ...
      }
    }
  }
}

以下是我是如何做到这一点的。可能有更好的方法,但我们需要在内存中创建一个新数组,将alpha字符作为实际的键(基本上我们正在删除不需要的父数组)。然后我们使用ksort对数组进行实际排序

<?php 
$test = array(
    array("a" => array("status" =>1, "blah" => 2)),
    array("f" => array("status" =>1, "blah" => 2)),
    array("c" => array("status" =>1, "blah" => 2)),
    array("b" => array("status" =>1, "blah" => 2)),
    array("z" => array("status" =>1, "blah" => 2))
);
foreach($test as $key=>$val){
    foreach($val as $key2=>$val2){
        $newTest[$key2] = $val2;
    }
}
echo '<pre>';
var_dump($test);
ksort($newTest);
var_dump($newTest);
echo '</pre>';
?>


不确定,我试过了,它无法进入第三层左右。我甚至不知道是否需要使用multisort。您是否可以对顶级阵列进行k排序?它应该按alpha对顶级键进行排序。在这种情况下,结果将是A,C,F。除非原始问题定义得不够,否则应该对数组进行正确排序。OP,是不是希望对顶层排序,然后按状态排序?@jkinz你是说ksort($whateverArray)吗?因为某种原因,它对我不起作用。虽然它确实应该这样做。你能把实际的数组变量转储吗?如果钥匙真的是A,C,F,它应该能工作。ksort doc页面上的第一个示例是alpha排序,所以我想知道这里是否还有其他情况发生。@jkinz我粘贴了var dump,我确实看到了一些愚蠢的东西。它可能不是最有效的,所以如果你有很多对象,你可能需要考虑优化它的方法,但是,如果您使用的是一个小数据集,它对性能的影响应该不会太大。很高兴它对你有用!
<?php 
$test = array(
    array("a" => array("status" =>1, "blah" => 2)),
    array("f" => array("status" =>1, "blah" => 2)),
    array("c" => array("status" =>1, "blah" => 2)),
    array("b" => array("status" =>1, "blah" => 2)),
    array("z" => array("status" =>1, "blah" => 2))
);
foreach($test as $key=>$val){
    foreach($val as $key2=>$val2){
        $newTest[$key2] = $val2;
    }
}
echo '<pre>';
var_dump($test);
ksort($newTest);
var_dump($newTest);
echo '</pre>';
?>