我有两个数组,一个是保存信息的多维数组,另一个是一个简单数组,它保存我想要第一个数组的顺序的值。
例如,我希望第一个数组按 ID 和第二个数组中的值排序。
$users 数组:
array(3) {
[0] => array(3) {
'id' => 1,
'name' => 'John Smith',
'email' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="acc6c3c4c2ecc9d4cdc1dcc0c982cfc3c1" rel="noreferrer noopener nofollow">[email protected]</a>',
},
[2] => array(3) {
'id' => 2,
'name' => 'Jane Smith',
'email' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a707b747f5a7f627b776a767f34797577" rel="noreferrer noopener nofollow">[email protected]</a>',
},
[0] => array(3) {
'id' => 3,
'name' => 'Jack Smith',
'email' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e9a3888a82a98c91888499858cc78a8684" rel="noreferrer noopener nofollow">[email protected]</a>',
},
}
$订单数组:
array(3) {
[0] => '2',
[1] => '3',
[2] => '1',
}
我希望排序数组的结果是:
array(3) {
[0] => array(3) {
'id' => 2,
'name' => 'Jane Smith',
'email' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b4ded5dad1f4d1ccd5d9c4d8d19ad7dbd9" rel="noreferrer noopener nofollow">[email protected]</a>',
},
[2] => array(3) {
'id' => 3,
'name' => 'Jack Smith',
'email' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5b313a38301b3e233a362b373e75383436" rel="noreferrer noopener nofollow">[email protected]</a>',
},
[0] => array(3) {
'id' => 1,
'name' => 'John Smith',
'email' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="de94b1b6b09ebba6bfb3aeb2bbf0bdb1b3" rel="noreferrer noopener nofollow">[email protected]</a>',
},
}
正如您所看到的,我希望对数组键重新索引,因此它们始终从 0 开始按顺序排列,但 $users 数组中每个元素的值要重新排序。
最佳答案
你可以这样做:
// Index users by ID
$users = array_combine(
array_column($users, 'id'),
$users
);
// Order the users
$users = array_map(function ($id) use ($users) {
return $users[$id];
}, $order);
这里我用了array_combine()
函数,通过将给定的键映射到值来创建数组。对于键,我按顺序使用了所有 id(使用 array_column()
获取它们)。
有了这样形式的数组,我可以循环 $order
数组并按索引从 $users
数组中获取值,这些值实际上具有 >现在
。
我没有使用 foreach
循环,而是使用 array_map()
功能。如果您有一个集合(即数组),最好使用 higher order functions来处理它们。如果您是初学者,这可能会让人不知所措,但您必须学习这一点,因为这就是当今的做法。
关于PHP - 按另一个数组的值对关联数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39877512/