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' => 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;
}
我试着用这个看看是否有效,但没有。
解决方案
使用 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
推荐阅读
- jenkins - 构建失败时是否可以关闭Jenkins的gitlab合并请求
- asp.net-mvc - 间歇性地得到“无法创建 SSL/TLS 安全通道”,当前的解决方法是重新启动 Web 服务器
- javascript - 在角度组件中操作复选框道具
- arrays - 类型 [Node] 不符合 Swift 4.0 中的“Equatable”?
- spring-boot - spring-batch 读取包含要摄取的文件名的文件
- php - 数组中的 foreach 没有像 [0] 这样的键 ->
- java - 在android中迁移房间数据库
- python - Pandas:保存一个类别独有的行
- django - 由于验证器,Django 1.8 makemigrations 每次都会生成重复的迁移
- javascript - 无法挂载组件:使用 vue-c3