2012-04-09 47 views
0

阵列计数我有IP网络的阵列组阵列由

<?php 
$array = array(
    '217.192' => array(
     array(
      'ip' => '217.192.133.52', 
      'id' => '1', 
     ), 
     array(
      'ip' => '217.192.98.111', 
      'id' => '2', 
     ), 
    ), 
    '21.170' => array(
     array(
      'ip' => '21.170.171.23', 
      'id' => '3', 
     ), 
     array(
      'ip' => '21.170.212.22', 
      'id' => '4', 
     ), 
    ), 
    '148.11' => array(
     array(
      'ip' => '148.11.11.12', 
      'id' => '5', 
     ), 
     array(
      'ip' => '148.11.122.33', 
      'id' => '6', 
     ), 
     array(
      'ip' => '148.11.22.89', 
      'id' => '7', 
     ), 
    ), 
    '72.1' => array(
     array(
      'ip' => '72.1.98.9', 
      'id' => '8', 
     ), 
    ), 
); 

我需要输出这个数组排序由计数和排序子网(数组的键)。

arsort($array)不能像我想要的那样工作。

我需要 148.11,21.170,217.192,72.1和内这些所谓的排序IPS ...

回答

1

试试这个:

function sortHelper(array $a, array $b) { 
    $aCnt = count($a); 
    $bCnt = count($b); 
    if ($aCnt == $bCnt) { 
     return 0; 
    } else if ($aCnt > $bCnt) { 
     return -1; 
    } else { 
     return 1; 
    } 
} 

uasort($array, 'sortHelper'); 

// UPDATE: sort inside by IP 

function ipSortHelper(array $a, $b) { 
    $aIp = ip2long($a['ip']); 
    $bIp = ip2long($b['ip']); 
    if ($aIp == $bIp) { 
     return 0; 
    } else if ($aIp < $bIp) { 
     return -1; 
    } else { 
     return 1; 
    } 
} 

foreach ($array as $prefix => $group) { 
    uasort($group, 'ipSortHelper'); 
    $array[$prefix] = $group; 
} 
+0

它的工作原理!非常感谢。我如何可以在数组中排序ip? – Isis 2012-04-09 13:41:41

+0

查看更新的答案 – 2012-04-09 13:53:14