使用另一个数组中的值更新多维数组中的所有数组键

时间:2016-06-28 14:41:29

标签: php arrays multidimensional-array

我想将多维数组$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非常大。有没有更有效的方法来实现这一目标?

请注意,由于使用多维数组,此问题与作为副本提供的问题不同。

2 个答案:

答案 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);
}