| Autor | Zpráva | ||
|---|---|---|---|
| quatzael Profil |
#1 · Zasláno: 12. 7. 2015, 23:35:48
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 |
#2 · Zasláno: 12. 7. 2015, 23:56:50
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); |
||
| juriad Profil |
#4 · Zasláno: 13. 7. 2015, 00:01:24
quatzael:
Ano, pokud znáš pozici prvku 'b'. Jinak jej musíš nějak zjistit a iterovat přes všechny výskyty. |
||
| quatzael Profil |
#5 · Zasláno: 13. 7. 2015, 00:04:16
juriad:
Jo to zjistím pomocí array_search(). To bude asi nejjednodušší. Každopádně díky!!
|
||
| Keeehi Profil |
#6 · Zasláno: 13. 7. 2015, 00:21:12
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 |
#7 · Zasláno: 14. 7. 2015, 10:57:30
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 |
#8 · Zasláno: 14. 7. 2015, 12:56:29
To by rozhodně nemělo.
|
||
|
Časová prodleva: 11 let
|
|||
0