首页 > 解决方案 > 排序和过滤多维数组

问题描述

我需要用这个多维数组来捕捉每个国家的老年人

$arrayPersonas = array(
    array('id'=> "0AB239", 'country' => 1, 'firstname' => "Ernest"  , 'surname' => "Austin", 'age' => 30),
    array('id'=> "12A179", 'country' => 0, 'firstname' => "Frances", 'surname' => "Poole", 'age' => 23),
    array('id'=> "1A90B9", 'country' => 1, 'firstname' => "Jacob", 'surname' => "Matthews", 'age' => 30),
    array('id'=> "227FF9", 'country' => 2, 'firstname' => "Mina", 'surname' => "Day", 'age' => 30),
    array('id'=> "2A6F39", 'country' => 3, 'firstname' => "Earl", 'surname' => "Mills", 'age' => 20),
    array('id'=> "325E79", 'country' => 4, 'firstname' => "Dennis", 'surname' => "Ray", 'age' => 33),
    array('id'=> "32E478", 'country' => 4, 'firstname' => "Alex", 'surname' => "Fery", 'age' => 33),
    array('id'=> "3A4DB9", 'country' => 5, 'firstname' => "Rhoda", 'surname' => "Conner", 'age' => 35));

我还必须显示该数组的所有内容,因为我必须显示 ID、国家、名字等。

我试图按国家排序,然后取最年长的人,但我失败了

function filtrar_por($data){
array_filter($data, function( $var ){
  for($i=0; $i <= 5; $i++){
    switch ($i) {
      case 0:
        $country0 = $var['country'] == $i;
        $country0 = ordenar_por($country0);
        echo $country0;
        break;
      case 1:
        $country1 = $var['country'] == $i;
        break;
      case 2:
        $country2 = $var['country'] == $i;
        break;
      case 3:
        $country3 = $var['country'] == $i;
        break;
      case 4:
        $country4 = $var['country'] == $i;
        break;
      case 5:
        $country5 = $var['country'] == $i;
        break;
    }        
  }
});
}

  function ordenar_por($data){
    foreach ($data as $clave => $fila) {
      $orden1[$clave] = $fila['age'];
    }
    array_multisort($orden1, SORT_DESC, $data);
    return $data;
  }

我试着用这个看看是否有效,但没有。

标签: php

解决方案


使用 usort 如下:

<?php

$arrayPersonas = array(
    array('id'=> "0AB239", 'country' => 1, 'firstname' => "Ernest"  , 'surname' => "Austin", 'age' => 30),
    array('id'=> "12A179", 'country' => 0, 'firstname' => "Frances", 'surname' => "Poole", 'age' => 23),
    array('id'=> "1A90B9", 'country' => 1, 'firstname' => "Jacob", 'surname' => "Matthews", 'age' => 30),
    array('id'=> "227FF9", 'country' => 2, 'firstname' => "Mina", 'surname' => "Day", 'age' => 30),
    array('id'=> "2A6F39", 'country' => 3, 'firstname' => "Earl", 'surname' => "Mills", 'age' => 40),
    array('id'=> "325E79", 'country' => 4, 'firstname' => "Dennis", 'surname' => "Ray", 'age' => 33),
    array('id'=> "32E478", 'country' => 4, 'firstname' => "Alex", 'surname' => "Fery", 'age' => 50),
    array('id'=> "3A4DB9", 'country' => 5, 'firstname' => "Rhoda", 'surname' => "Conner", 'age' => 35));
    
$final_data = array();
function sortByOrder($a, $b) {
    return $a['age'] + $b['age'];
}

foreach( $arrayPersonas as $person){
    if(!empty($final_data[$person['country']])){
        foreach( $final_data[$person['country']] as $key => $value ){
            if( $final_data[$person['country']][$key]['age'] < $person['age'] ){
                unset($final_data[$person['country']][$key]);
                $final_data[$person['country']][] = $person;
            }else if( $final_data[$person['country']][$key]['age'] == $person['age'] ){
                $final_data[$person['country']][] = $person;
            }
        }
    }else{
        $final_data[$person['country']][] = $person;
        usort($final_data[$person['country']], 'sortByOrder');
    }
}
print_r($final_data);

代码片段沙箱:http ://sandbox.onlinephpfunctions.com/code/8ffed1ebb2940fc71cd35cb8bfddae2e8ca3077c


推荐阅读