我有两个数组:
$arrKeys = array('str', 'str', 'otherStr');
$arrVals = array('1.22', '1.99', '5.17');
我想把它们合并成像这样的东西
$arrResult = array(
array('str' => 1.22),
array('str' => 1.99),
array('otherStr' => 5.17)
);
密钥不是唯一的,否则我会使用array_combine
。这会产生不同的输出,但它也适合我。
这可以使用PHP 5.2.x以优雅的方式完成,没有foreach
/ for
循环,最好使用PHP的内置函数吗?
答案 0 :(得分:13)
您可以使用array_map
:
$arrKeys = array('str', 'str', 'otherStr');
$arrVals = array('1.22', '1.99', '5.17');
function foo($key, $val) {
return array($key=>$val);
}
$arrResult = array_map('foo', $arrKeys, $arrVals);
print_r($arrResult);
Array
(
[0] => Array
(
[str] => 1.22
)
[1] => Array
(
[str] => 1.99
)
[2] => Array
(
[otherStr] => 5.17
)
)
顺便说一句,如果你升级到PHP 5.3,你可以使用一个更优雅的匿名函数来做到这一点:
array_map(function($key, $val) {return array($key=>$val);}, $arrKeys, $arrVals);
答案 1 :(得分:10)
使用PHP的内置函数绝对没有“优雅”,也没有什么可追求的。
这不是 Haute Couture 节目。这是编程。
只要你有一个理智,可读和有效的解决方案,你就可以称之为优雅。
简单的foreach将完成这项工作。如果开始使用工作解决方案而不是寻找“优雅”的解决方案,那么你会给自己带来巨大的好处并节省大量时间。
$result = array();
foreach ($arrKeys as $i => $key) {
$result[] = array($key => $arrVals[$i]);
}
答案 2 :(得分:2)
假设您希望将$arrKeys
中的项目0和$arrVals
中的项目0添加到一个数组中,并将该数组添加为$arrResult
中的项目,依此类推,最简单方式可能是一个简单的循环:
$arrResult = array();
for ($i = 0, $max = count($arrKeys); $i < $max; $i++) {
$arrResult[] = array($arrKeys[$i], $arrValues[$i]);
}