Autor Zpráva
quatzael
Profil
EDIT: tím číselným key fakticky myslím pořadí v poli.
Jde mi o vložení položky doprostřed pole, za konkrétní hodnotu v poli.

$array = ('blue','black','green','white','red');
function insertIntoArray($array,$item,$position){
/* 
Když zadám:
$newarray = insertIntoArray($array,'yellow','green');
má vrátit pole:
$newarray = ('blue','black','green','yellow','white','red');
*/
}

Potřeboval bych, aby to pro jistotu fungovalo i pro asociativní pole.

Našel jsem tohle řešení:
function insertIntoArray($array, $item, $position)
{
    $begin = array_slice($array, 0, $position);
    array_push($begin, $item);
    $end = array_slice($array, $position);
    $resultArray = array_merge($begin, $end);
    return $resultArray;
}

Ale bohužel se tam musí zadat číselná pozice ($position) kam se nová položka vloží a já nevím jak jí zjistit, aby to fungovalo i když ty klíče budou spřeházený, např:

$array = (8=>'blue',5=>'black',9=>'green',4=>'white',2=>'red');



Napadlo mě tohle řešení, ale nevím jestli je to úplně správně:

function insertIntoArray($array, $item, $position)
{
if (!is_array($item)) $item = array($item);
$numpos = 0;
$first_array = array();
$i = 0;
$if = true;
foreach ($array as $key=>$value)
{
$i++;
if ($value == $position)
{
$numpos = $i;
$if = false;
}
}

    $begin = array_slice($array, 0, $numpos);
    array_push($begin, $item);
    $end = array_slice($array, $numpos);
    $resultArray = array_merge($begin, $end);
    return $resultArray;
}



Tak ještě oprava:
Nemá tam být 3. řádek: if (!is_array($item)) $item = array($item);
han5vk
Profil
Namiesto toho komplikovaného foreachu by stačilo
$numpos = array_search($position, array_keys($array))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: