Интересно, чем CMap::mergeArray отличается от native php функций array_merge_recursive/array_merge?
Судя по тому, что CMap::mergeArray не тупо вызывает внутри себя array_merge_recursive, смысл видимо есть
Интересно, чем CMap::mergeArray отличается от native php функций array_merge_recursive/array_merge?
Судя по тому, что CMap::mergeArray не тупо вызывает внутри себя array_merge_recursive, смысл видимо есть
хех, тоже интересно стало
оказывается вот чо:
<?php
$a = array('ja' => 'ku!');
$b = array('ja' => 'jo');
var_dump(array_merge_recursive($a, $<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />);
var_dump(CMap::mergeArray($a, $<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />);
array(1) {
["ja"]=>
array(2) {
[0]=>
string(3) "ku!"
[1]=>
string(2) "jo"
}
}
array(1) {
["ja"]=>
string(2) "jo"
}
)))
а код функции не посмотреть просто
<?php
/**
* Merges two arrays into one recursively.
* @param array array to be merged to
* @param array array to be merged from
* @return array the merged array (the original arrays are not changed.)
* @see mergeWith
*/
public static function mergeArray($a,$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />
{
foreach($b as $k=>$v)
{
if(is_integer($k))
$a[]=$v;
else if(is_array($v) && isset($a[$k]) && is_array($a[$k]))
$a[$k]=self::mergeArray($a[$k],$v);
else
$a[$k]=$v;
}
return $a;
}
<?php
$a = array('ja' => 'ku!');
$b = array('ja' => 'jo');
var_dump(array_merge_recursive($a, $<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />);
var_dump(array_merge($a, $<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />);
var_dump(CMap::mergeArray($a, $<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />);
//-----
array
'ja' =>
array
0 => string 'ku!' (length=3)
1 => string 'jo' (length=2)
array
'ja' => string 'jo' (length=2)
array
'ja' => string 'jo' (length=2)
Спасибо
Функция array_replace_recursive, появившаяся в PHP 5.3 – аналог CMap::mergeArray, как я понимаю, но все же стоит использовать CMap::mergeArray для совместимости со старыми версиями PHP