我有一个包含这些值的数组:
foreach($dbEntries as $ip){
$ips[] = array(
'location' => $ip->geLocation(),
'description' => $ip->getDescription(),
'note' => $ip->getNote(),
'ipAddress' => $ip->getIpAddress(),
'id' => $ip->getId(),
);
}
知道我想通过' ipAddress'对此数组进行排序通常我这样做(PHP 7):
usort($ips, function($a, $b) {
return $a['ipAddress'] <=> $b['ipAddress'];
});
但是这并没有被IP正确排序。
我读到了SORT_NATURAL
的{{1}}标记,但这给了我一个错误:array_multisort
警告:array_multisort():参数#1应该是数组或排序标志
如何在多维数组中自然地按IP排序?
答案 0 :(得分:2)
试试这个
foreach ($dbEntries as $key => $row) {
// replace 0 with the index of 'IpAddress'
$entries[$key] = $row[0];
}
array_multisort($entries, SORT_DESC, $dbEntries );
答案 1 :(得分:1)
你没有$ips['ipAddress']
之类的钥匙。这就是你收到警告的原因。
php.net中的一个示例可以帮助解决您的问题。
首先,您需要在一个数组中收集所有ips以对主要数据进行排序。以下是如何做到这一点的示例。
<?php
// Obtain a list of columns
$ipList = [];
foreach($dbEntries as $arrayKey => $ip){
$ips[$arrayKey] = [
'location' => $ip->geLocation(),
'description' => $ip->getDescription(),
'note' => $ip->getNote(),
'ipAddress' => $ip->getIpAddress(),
'id' => $ip->getId(),
];
// Collect all ips with same array key
$ipList[$arrayKey] = $ip->getIpAddress();
}
// Sort the data with ipList natural order
// Add $ips as the last parameter, to sort by the common key
array_multisort($ipList, SORT_NATURAL, $ips);
// Now you can use sorted $ips array
print_r($ips);