用另一个数组重写数组的键

3

我希望将数组“foo”的数字键重写为字符串键。关系保存在另一个数组“bar”中。

$foo = array(
 1 => 'foo',
 2 => 'bar',
 ...
);

$bar = array(
 1 => 'abc',
 2 => 'xyz',
 ...
);

$result = array(
 'abc' => 'foo',
 'xyz' => 'bar',
 ...
);

什么是最快的方法来实现这个结果?
2个回答

7

使用 array_combine 函数:

$combined = array_combine($bar, $foo);

print_r($combined); 的输出结果为:

Array
(
    [abc] => foo
    [xyz] => bar
)

1

如果两个数组($foo和$bar)中的键/值顺序不同,NullPointer的示例将失败。请考虑以下情况:

$foo = array(
    1 => 'foo',
    2 => 'bar',
);

$bar = array(
    2 => 'xyz',
    1 => 'abc',
);

如果您像以前一样运行array_combine($foo, $bar),输出将会是:
array(2) {
  ["foo"]=>
  string(3) "xyz"
  ["bar"]=>
  string(3) "abc"
}

这个简单的循环应该可以工作:
$output = array();
foreach ($bar as $from => $to) {
    $output[$to] = $foo[$from];
}

为什么不直接对这两个数组都使用 ksort 呢? :P - cHao
请注意,OP明确定义了数组索引(1 =>),因此我想我们可以假设已经处理好了,此外我们总是可以重新索引两个数组(例如array_values)。对我来说,array_combine似乎是更简短、更简单的解决方案。 - Zbigniew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接