Вставить пару элементов в начало масива не нарушая его структуру

Кощей

if(!$needle) die("ooh");
Вставить пару элементов в начало масива не нарушая его структуру

Есть готовая форма и не хочется сильно переписывать, нужно задать вначале дропдауна пару чаще всего выбираемых стран, сейчас дропдаун строится от масива типа

PHP:
Array
(
    [0] => Нет
    [1323] => Австралия
    [1322] => Австрия
    [1315] => Азербайджан
    [1326] => Алжир
    [1387] => Ангола
    [1373] => Антильские Острова
    [1332] => Аргентина
    [1341] => Армения
    [1365] => Бангладеш
    [1302] => Беларусь
  ...
    [1354] => Южная Корея
    [1337] => Япония
    [1] => dd
)
Когда пишу $[индекс] всеравно забрасывает в конец, если делаю array_unshift сбрасывает имена ключей на 0, 1, 2, 3
Как правильно добавить вначало после 0 => Нет еще 1 => Украина, 2 => Россия ?
 

zerkms

TDD infected
Команда форума
[m]array_unshift[/m]

upd: а, не, его нельзя...

array_keys + array_unshift + array_combine

ps: такое черезжопное решение косвенно свидетельствует о том, что ты что-то делаешь не так.
 

Кощей

if(!$needle) die("ooh");
Да это кусок не моего кода, я бы вообще страны буквенными кодами обозначал, но нужно чуть поправить для удобства выбора и ради тако фичи переделывать это не охота если уже так работает
 

tolst

Новичок
PHP:
$array = array(...);
$new_array = array(0 => "Нет", 7777 => "Пхпклубия", 6132 => "ХайперТекст");
foreach ($array AS $key => $value){
	$new_array[$key] = $value;
}
это как вариант алгоритма, что бы ТС хотя бы начал с чего то
я вижу следующие недостатки
1) новый массив
2) проход по циклу
 

pilot911

Новичок
функция для склейки двух массивов - просто нужно указать ключ первого массива, после/перед которым вставляете второй массив


PHP:
$result = array_insert(array(4,5,6,7,8), 0, array(1,2,3));


$result = array(1,2,3,4,5,6,7,8);


PHP:
	/**
	 * inserts values from $arr2 after (or before) $key in $arr1
	 * if $key is not found, values from $arr2 are appended to the end of $arr1
	 *
	 * This function uses array_merge() so be aware that values from conflicting keys
	 * will overwrite each other
	 *
	 * @param 	array 		Array to insert into
	 * @param 	mixed 		Key of $arr1 to insert after (or before)
	 * @param 	array 		Array whose values should be inserted
	 * @param 	boolean 	Insert before the given key. defaults to inserting after
	 * @return 	array		Merged array
	 *   
	 */
	static	function array_insert($arr1, $key, $arr2, $before = FALSE) {
	  	$index = array_search($key, array_keys($arr1));
	  
	  	if($index === FALSE){
			$index = count($arr1); // insert @ end of array if $key not found
		}
	 	else {
			if(!$before){
			  	$index++;
			}
	  	}
	  
		  	$end = array_splice($arr1, $index);
		  	return array_merge($arr1, $arr2, $end);
	}
 

Adelf

Administrator
Команда форума
PHP:
$t1 = array(
    0 => 'Нет',
    1323 => 'Австралия',
    1322 => 'Австрия',
    1315 => 'Азербайджан',
    1326 => 'Алжир',
    1387 => 'Ангола',
    1373 => 'Антильские Острова',
    1332 => 'Аргентина',
    1341 => 'Армения',
    1365 => 'Бангладеш',
    1302 => 'Беларусь',
    
    1502 => 'Россия'
);

$t2 = array(
	0 => 'Нет',
	1502 => 'Россия');
	
$t1 = $t2 + $t1;
var_dump($t1);
Как-то так получилось, что я в данной теме поработал переводчиком ФАHATа...
 

tolst

Новичок
вот уже как почти 7 лет тесно дружу с php и не знал о "+" =)
спасибо )))
 
Сверху