,因爲你需要的$b
陣列中的每個元素上運行相同的功能:
$a = array(4=>2000,5=>5000,7=>1000,3=>5000);
$b = array(array(0,4,10,1000), array(0,4,10,40));
,您可以利用的array_map
有回調功能。回調函數然後使用array_combine
將您的密鑰分配給值。
由於array_combine
需要有操作鍵,但回調只有值作爲輸入,我創建了一個函數,根據陣列創建實際的回調函數,這些鍵將用於操作array_combine
。
由於數組可以包含任何值,因此可以採取一些預防措施。空數組不會在所有被處理,對於特定鍵遺漏值將被通知,NULL
:
$keyed = function($array)
{
$keys = array_keys($array);
// no keys, nothing to combine
if (!$len = count($keys)) {
return function($v) {return array();};
}
// default values are all NULL
$pad = array_fill(0, $len, NULL);
return function($values) use ($keys, $pad, $len)
{
// if input is not array, make it an empty array
!is_array($values) && $values = array();
return array_combine($keys, array_slice($values + $pad, 0, $len));
};
};
的$keyed
現在是匿名函數將返回回調函數依賴於它array_map
是爲數組鍵輸入參數:
$c = array_map($keyed($a), $b);
從5.3版本開始,PHP中提供了匿名函數。
輸出:
array(2) {
[0]=> array(4) {
[4]=> int(0)
[5]=> int(4)
[7]=> int(10)
[3]=> int(1000)
}
[1]=> array(4) {
[4]=> int(0)
[5]=> int(4)
[7]=> int(10)
[3]=> int(40)
}
}
它遺漏邊緣情況下'$ sub'不是一個數組(如果你想防止警告,完整)。此外,我建議你用NULL值而不是0填充數組。我已經使用匿名回調函數使關鍵字成爲回調的一部分。這也允許在任何值上使用它。請參閱[我的答案](http://stackoverflow.com/a/8660676/367456)。 – hakre 2011-12-28 20:10:32
@hakre我認爲它暗示'$ sub'總是一個數組,但如果不是這樣的話,那麼它很容易適應(儘管我喜歡你的回調)。 – 2011-12-28 20:15:58