我有以下数组:
$names = array('fred', 'bob', 'john');
$input = array('bob' => array('bob data'), 'john' => array('john data'), 'fred' => array('fred data'));
我想重新排序$input
中的密钥,以便它们与$names
中指定的顺序完全相同。有什么想法吗?
答案 0 :(得分:1)
看到第二个数组如何被适当地索引,你可以将其视为重组问题,而不是考虑排序算法:
function recombine(array $input, array $names)
{
$result = [];
foreach ($names as $name) {
$result[$name] = $input[$name];
}
return $result;
}
$input = recombine($input, $names);
如果$input
中没有某些名称,则需要在循环体内放置一个条件。
答案 1 :(得分:0)
您可以使用以下内容:
function sortByArray($input, $order)
{
$sorted = array();
$count = count($order);
for ($i = 0; $i < $count; $i++) {
if (isset($input[$order[$i]])) {
$sorted[$order[$i]] = $input[$order[$i]];
}
}
return $sorted;
}
$input = sortByArray($input, $names);
答案 2 :(得分:0)
试试这个:
$names = array('fred', 'bob', 'john');
foreach($names as $val){
$input[$val]=array($val=>$val."Data");
}
var_dump($input);
答案 3 :(得分:-1)
我使用以下代码
$names = array('fred', 'bob', 'john');
$input = array('bob' => array('bob data'), 'john' => array('john data'), 'fred' => array('fred data'));
$result = [];
foreach ($names as $name) {
$result[$name] = $input[$name];
}
print_r($result);