Autor Zpráva
quatzael
Profil
Ahoj, potřeboval bych odstranit z pole prvek a místo něj dát jiné prvky, nejlépe takové, které jsou uvedeny v jiném poli.

Příklad (místo 'b' vložit 'x' a 'y'):
$newitems = ('x','y');
$array = ('a','b','c','d');
//chci dostat tohle:
$newarray = ('a','x','y','c','d');

Vím, že jde o triviální problém, ale už jsem nespal pořádně několik dnů a nějak mě prostě při tý únavě nenapadá nějaký easy řešení, abych tam nemusel dělat nějaký čachry s funkcí splice..

Předem díky.
juriad
Profil
quatzael:
A co to zkusit třeba pomocí obyčejného cyklu?
$newarray = array();
foreach ($array as $a) {
  if ($a == 'b') {
    foreach ($newitems as $n) {
      $newarray[] = $n;
    }
  } else {
    $newarray[] = $a;
  }
}
quatzael
Profil
juriad:
Aha, mě teď napadlo tohle:
array_splice($array,1,1,$newitems);
S tím, že se upraví přímo to původní pole $array.
juriad
Profil
quatzael:
Ano, pokud znáš pozici prvku 'b'. Jinak jej musíš nějak zjistit a iterovat přes všechny výskyty.
quatzael
Profil
juriad:
Jo to zjistím pomocí array_search(). To bude asi nejjednodušší. Každopádně díky!!
Keeehi
Profil
quatzael:
Záleží jestli tam ten prvek může být jednou a nebo vícekrát. Pro velká pole a spoustu nahrazení bude algoritmicky nejrychlejší projít pole, zjistit počet nahrazení, vypočítat délku nového pole a postupně ho prvek po prvku naplnit.
Ovšem v PHP není pole řešené polem ale nějakou hašovací tabulkou. Tam bude ta složitost vycházet pravděpodobně jinak.
quatzael
Profil
Keeehi:
Ten prvek tam bude jen jednou. V poli bude cca 20 prvků a místo jednoho se tam přidá cca 5 nových prvků. Tohle celý se udělá dvakrát. To by snad nemělo mít nějaký zásadní dopad na rychlost, když použiju to array_splice(), ne?
Keeehi
Profil
To by rozhodně nemělo.

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:

0