在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>';
?>