[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как добавить элемент в массив с меньшим ключем
arr_info
Привет, существует числовой массив.

$array=array(20,30,11,15);
echo $array[2];// значение 11
unset($array[2]);

//теперь ключа два не существует, и если добавить еще одно значение в массив вот так $array[]=50;
//То новое значение будет с ключом 4


Как сделать так чтоб добавлялся новый элемент с ключом самым меньшим (то есть не существующим, не существует у нас ключа 2 - вот нужно чтоб добавился именно ключ 2)

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

function new_key(&$array,$value){
ksort($array);
end($array);
$key=key($array);
if(count($array)>0 AND ((count($array)-1)<$key)){//Свободный ключ есть
for($i=0; $i<=$key; $i++){
if(!isset($array[$i])){
$array[$i]=$value;
break;
}
}
}
else{//Ключ следующий, нет свободного ключа
if(count($array)>0){
$array[$key+1]=$value;
}else{
$array[0]=$value;
}
}
}


print_r($array);//Array ( [0] => 20 [1] => 30 [3] => 15 )
new_key($array,66);
print_r($array);//Array ( [0] => 20 [1] => 30 [3] => 15 [2] => 66 )
new_key($array,33);
print_r($array);//Array ( [0] => 20 [1] => 30 [2] => 66 [3] => 15 [4] => 33 )
new_key($array,44);
print_r($array);//Array ( [0] => 20 [1] => 30 [2] => 66 [3] => 15 [4] => 33 [5] => 44 )


P.S. Ключи которые находятся в массиве очень важны - так что нужно только добавлять новый в щель так скажем где есть свободное место (если есть ключи от 0 до 88000 и от 88002 до 999999, то нам нужно добавить ключ 88001), но мне кажется что можно найти какой то другой способ добавления без моей функции - все таки 88001 придется циклом проходиться в данном примере и проверять есть ли ключ или нет...

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.