如何根据另一个数组的 ID 对数组进行排序?
How do I sort an array based on another array's IDs?
我有两个 arrays.The 第一个数组有一个符合特定规则的行 ID。
请注意,我无法访问 SQL 服务器进行 运行 查询。
$ids = array (
0 => '13',
1 => '14',
2 => '12',
3 => '83'
);
$groups = array (
0 =>
array (
'id' => '83',
'email' => 'joe'
),
1 =>
array (
'id' => '12',
'name' => 'emily'
),
2 =>
array (
'id' => '13',
'name' => 'leo'
),
3 =>
array (
'id' => '14',
'name' => 'jack'
)
);
我希望第二个数组根据第一个数组中的 ID 排序 array.The 预期结果是这样的:
$groups = array (
0 =>
array (
'id' => '13',
'email' => 'leo'
),
1 =>
array (
'id' => '14',
'name' => 'jack'
),
2 =>
array (
'id' => '12',
'name' => 'emily'
),
3 =>
array (
'id' => '83',
'name' => 'joe'
)
);
你们能帮帮我吗?
谢谢!
如果您有权访问创建 $groups 的代码,那么
$flippedIds = array_flip($ids);
$group[flippedIds[$id]] = array($id,$name);
ksort($group);
否则你可以
$flippedIds = array_flip($ids);
foreach $group as $k => $val){
$group[$k] = $group[$flippedIds[$val['id']]][$k][$val];
}
ksort($group);
如果 $group 数组永远不会有与 $ids 重复的 id,则可以删除 [$k] 元素。否则重复的值将覆盖之前的值。
$flippedIds = array_flip($ids);
foreach $group as $k => $val){
$group[$k] = $group[$flippedIds[$val['id']]][$val];
}
ksort($group);
$flippedIds = array_flip($ids);
$result = array();
foreach ($group as $item) {
$result[$flippedIds[$item['id']]] = $item;
}
这是因为您的 $id 是独一无二的。
您可能还需要输入一个
ksort($result)
试试这个。
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
return $current_key;
}
}
return false;
}
$newArray = array();
for($i=0;$i<count($ids);$i++)
{
$groupKey = recursive_array_search($ids[$i],$groups);
$newArray[] = $groups[$groupKey];
}
print_r($newArray);
我有两个 arrays.The 第一个数组有一个符合特定规则的行 ID。 请注意,我无法访问 SQL 服务器进行 运行 查询。
$ids = array (
0 => '13',
1 => '14',
2 => '12',
3 => '83'
);
$groups = array (
0 =>
array (
'id' => '83',
'email' => 'joe'
),
1 =>
array (
'id' => '12',
'name' => 'emily'
),
2 =>
array (
'id' => '13',
'name' => 'leo'
),
3 =>
array (
'id' => '14',
'name' => 'jack'
)
);
我希望第二个数组根据第一个数组中的 ID 排序 array.The 预期结果是这样的:
$groups = array (
0 =>
array (
'id' => '13',
'email' => 'leo'
),
1 =>
array (
'id' => '14',
'name' => 'jack'
),
2 =>
array (
'id' => '12',
'name' => 'emily'
),
3 =>
array (
'id' => '83',
'name' => 'joe'
)
);
你们能帮帮我吗?
谢谢!
如果您有权访问创建 $groups 的代码,那么
$flippedIds = array_flip($ids);
$group[flippedIds[$id]] = array($id,$name);
ksort($group);
否则你可以
$flippedIds = array_flip($ids);
foreach $group as $k => $val){
$group[$k] = $group[$flippedIds[$val['id']]][$k][$val];
}
ksort($group);
如果 $group 数组永远不会有与 $ids 重复的 id,则可以删除 [$k] 元素。否则重复的值将覆盖之前的值。
$flippedIds = array_flip($ids);
foreach $group as $k => $val){
$group[$k] = $group[$flippedIds[$val['id']]][$val];
}
ksort($group);
$flippedIds = array_flip($ids);
$result = array();
foreach ($group as $item) {
$result[$flippedIds[$item['id']]] = $item;
}
这是因为您的 $id 是独一无二的。
您可能还需要输入一个
ksort($result)
试试这个。
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
return $current_key;
}
}
return false;
}
$newArray = array();
for($i=0;$i<count($ids);$i++)
{
$groupKey = recursive_array_search($ids[$i],$groups);
$newArray[] = $groups[$groupKey];
}
print_r($newArray);