我想将多维数组$aValues
中的所有数字键替换为存储在$aKeyNames
中的文本等效项。
$aKeyNames = array(0 => 'foo', 1 => 'bar');
$aValues = array(
0 => array( 0 => 'content relating to foo', 1 => 'content relating to bar' ),
1 => array( 0 => 'content relating to foo', 1 => 'content relating to bar')
);
所需的输出;
array (size=2)
0 =>
array (size=2)
'foo' => string 'content relating to foo' (length=23)
'bar' => string 'content relating to bar' (length=23)
1 =>
array (size=2)
'foo' => string 'content relating to foo' (length=23)
'bar' => string 'content relating to bar' (length=23)
为实现这一目标,我已经编写了以下工作代码;
foreach ($aValues as $iValuePos => $aValue) {
foreach ($aValue as $iKey => $sTempValue){
$aValues[$iValuePos][ $aKeyNames[$iKey] ] = $sTempValue;
unset($aValues[$iValuePos][$iKey]);
}
}
我担心$aValues
非常大。有没有更有效的方法来实现这一目标?
请注意,由于使用多维数组,此问题与作为副本提供的问题不同。
答案 0 :(得分:1)
试试这个:
$aKeyNames = array(0 => 'foo', 1 => 'bar');
$aValues = array(
0 => array( 0 => 'content relating to foo', 1 => 'content relating to bar' ),
1 => array( 0 => 'content relating to foo', 1 => 'content relating to bar')
);
foreach ($aValues as $iValuePos => $aValue) {
$aValues[$iValuePos] = array_combine($aKeyNames, $aValue);
}
答案 1 :(得分:1)
我没有标记,但应该更快:
$aValues = array_map(function($v) use ($aKeyNames) {
return array_combine($aKeyNames, $v);
}, $aValues);
另一个使用引用&
的替代值:
foreach($aValues as &$v) {
$v = array_combine($aKeyNames, $v);
}