我在对数组进行排序时遇到一些问题。 我调用 API,得到的数据如下
array:41 [
0 => StreetData {#251
+house: "1 Some Street"
+street: ""
}
1 => StreetData {#236
+house: "11 Some Street"
+street: ""
}
2 => StreetData {#236
+house: "4 Some Street"
+street: ""
}
]
我正在尝试进行自然排序,所以一直在尝试
ksort($address->streets);
这似乎并没有改变任何事情。 我所追求的基本上是自然搜索。 所以应该首先考虑数字,然后考虑街道。 所以对于上述情况,我希望它是
array:41 [
0 => StreetData {#251
+house: "1 Some Street"
+street: ""
}
1 => StreetData {#236
+house: "4 Some Street"
+street: ""
}
2 => StreetData {#236
+house: "11 Some Street"
+street: ""
}
]
因为 11 大于 4。这是一个相当模糊的例子,显然我希望有 2、3 等。
那么我怎样才能实现这种自然的排序呢?
我认为你需要
strnatcmp
和 usort
。
<?php
class StreetData
{
public $house;
public $street;
public function StreetData($a, $b)
{
$this->house = $a;
$this->street = $b;
}
}
$arr = array(
new StreetData("1 Some Street", ""),
new StreetData("11 Some Street", ""),
new StreetData("4 Some Street", ""),
);
function mySort($a, $b)
{
return strnatcmp($a->house, $b->house);
}
usort($arr, "mySort");
var_dump($arr);
?>