Php 根据值是否存在并按整数重新排列数组

Php 根据值是否存在并按整数重新排列数组,php,arrays,Php,Arrays,我真的很难弄清楚如何对大型数组进行排序 该数组由属性数据组成。我需要使用两个关键数据片段来按顺序排列数组。它们是: 卧室数量 可用性状态 下面是一个数组示例 [0]=> array(8) { ["location"]=> array(4) { ["street_name"]=> string(10) "Derby Road" } ["info"]=> array(3) { ["status

我真的很难弄清楚如何对大型数组进行排序

该数组由属性数据组成。我需要使用两个关键数据片段来按顺序排列数组。它们是:

  • 卧室数量
  • 可用性状态
下面是一个数组示例

[0]=>
  array(8) {
    ["location"]=>
    array(4) {
      ["street_name"]=>
      string(10) "Derby Road"
    }
    ["info"]=>
    array(3) {
      ["status"]=>
      string(9) "available"
    }
    ["specs"]=>
    array(1) {
      ["bedroom_number"]=>
      string(1) "7"
    }
  }
status
键可以设置为
let
available
或一些其他选项。我需要做的是使
的任何属性都落在数组的底部,但按卧室编号的降序排列

所以,我想这是两条规则:

  • 属性必须始终显示在卧室编号中。因此,7间卧室应位于列表的顶部,1间卧室应位于列表的底部
  • “出租”状态属性应始终为其卧室编号中的最低值,例如:

    7居室酒店-可用

    7居室酒店-可用

    7居室物业-出租

    6居室酒店-可用

    7居室物业-出租

    4居室酒店-可用

    3居室物业-出租

我知道存在
usort()
,但我不确定如何在函数中进行这种排序。

我认为可以使用数组键进行排序

也许此设置可以帮助您:

$array = array(
    array(
        "location" => array("street_name" => "Derby Road"),
        "info" => array("status" => "available"),
        "specs" => array("bedroom_number" => "7")
    ),
    array(
        "location" => array("street_name" => "Derby Road"),
        "info" => array("status" => "let"),
        "specs" => array("bedroom_number" =>"5")
    ),
    array(
        "location" => array("street_name" => "Derby Road"),
        "info" => array("status" => "let"),
        "specs" => array("bedroom_number" =>"7")
    ),
    array(
        "location" => array("street_name" => "Derby Road"),
        "info" => array("status" => "available"),
        "specs" => array("bedroom_number" =>"5")
    ),
    array(
        "location" => array("street_name" => "Derby Road"),
        "info" => array("status" => "available"),
        "specs" => array("bedroom_number" =>"7")
    )
);
function cmp($a, $b) {
    if ($a["specs"]["bedroom_number"] === $b["specs"]["bedroom_number"]) {
        return ($a["info"]["status"] !== "let") ? -1 : 1;
    }
    return ($a["specs"]["bedroom_number"] > $b["specs"]["bedroom_number"]) ? -1 : 1;
}
usort($array, "cmp");

你试过数组\多重排序函数吗?以下是一个例子:

<?php
function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}
?>

排序后的数组现在位于函数的返回值中,而不是通过引用传递

<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

// Pass the array, followed by the column names and sort flags
$sorted = array_orderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC);
?>


字符串“cmp”是什么意思?我不知道你要传递给函数的是什么。$a和$b从何而来?这就是php函数的工作原理。“cmp”是用于进行排序的函数的名称(在示例
函数cmp
)$a和$b是用于进行比较的值。谢谢。这个答案非常有效。我只是尽力去理解它背后的机制。