чем CMap::mergeArray отличается от native php функций array_merge_recursive/array_merge?

Интересно, чем 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