按IP排序多维数组(SORT_NATURAL)

时间:2017-10-23 12:03:23

标签: php arrays sorting

我有一个包含这些值的数组:

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排序?

2 个答案:

答案 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);