我总共有三个数组
数组1
array1 = Array(
[0] => Array(
[name] => John
[city] => San Francisco
[state] => CA
)
[1] => Array(
[name] => Smith
[city] => Atlanta
[state] => GA
)
[2] => Array(
[name] => Peter
[city] => New York
[state] => NY
)
[3] => Array(
[name] => Mary
[city] => San Jose
[state] => CA
)
)
数组2(按平均年龄排序)
array2 = Array(
[0] => CA
[1] => NY
[2] => GA
)
数组3(根据人口排序)
array3 = Array(
[0] => New York
[1] => San Francisco
[2] => Atlanta
[3] => San Jose
)
如何首先根据数组2对数组1进行排序,然后按数组3进行排序。我想要以下输出:
排序数组1
Array
(
[0] => Array
(
[name] => John
[city] => San Francisco
[state] => CA
)
[1] => Array
(
[name] => Mary
[city] => San Jose
[state] => CA
)
[2] => Array
(
[name] => Peter
[city] => New York
[state] => NY
)
[3] => Array
(
[name] => Smith
[city] => Atlanta
[state] => GA
)
)
我尝试使用array_multisort
来实现此功能,但它不起作用,例如
array_multisort($array2,$array3,$array1)
非常感谢任何帮助。
答案 0 :(得分:2)
以下是通过$array1
和$array2
对$array3
进行排序以产生所需结果的一种方法:
<?php
$array1 = array(
array('name' => 'John', 'city' => 'San Francisco', 'state' => 'CA'),
array('name' => 'Smith', 'city' => 'Atlanta', 'state' => 'GA'),
array('name' => 'Peter', 'city' => 'New York', 'state' => 'NY'),
array('name' => 'Mary', 'city' => 'San Jose', 'state' => 'CA'),
);
$array2 = array(
'CA',
'NY',
'GA'
);
$array3 = array(
'New York',
'San Francisco',
'Atlanta',
'San Jose'
);
usort(
$array1,
function ($element1, $element2) use ($array2, $array3) {
$state_sort_order = array_flip($array2);
$element1_state_sort_order = $state_sort_order[$element1['state']];
$element2_state_sort_order = $state_sort_order[$element2['state']];
$state_sort_result = $element1_state_sort_order - $element2_state_sort_order;
if ($state_sort_result === 0) {
$city_sort_order = array_flip($array3);
$element1_city_sort_order = $city_sort_order[$element1['city']];
$element2_city_sort_order = $city_sort_order[$element2['city']];
return $element1_city_sort_order - $element2_city_sort_order;
} else {
return $state_sort_result;
}
}
);
print_r($array1);
同样,usort似乎是最灵活的选择。可能有办法弄清楚如何使用array_multisort,但我无法根据你给出的数据来判断。
我使用函数闭包,从外部作用域捕获$array2
和$array3
来进行排序。它定义了usort
的比较函数,以应用于$array1
的元素来确定排序顺序。在此函数中,$element1
和$element2
均会从$array1
接收元素的值以进行比较,例如'Smith,Atlanta,GA'
或'Mary,San Jose,CA'
。
对于每个元素,我提取元素的城市和州部分。如果您翻转$array2
和$array3
,则当您按$city
和$state
分别对其进行索引时,它们会成为排序顺序的查找表。
如果状态排序顺序相等,其余的只是返回城市排序顺序之间的差异,否则只返回状态排序顺序。
答案 1 :(得分:1)
您需要使用usort。您可以定义一个用户定义的函数,用于将数组1的元素与数组2和3进行比较,并在usort中使用该回调来执行排序。