$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 придется циклом проходиться в данном примере и проверять есть ли ключ или нет...