Autor | Zpráva | ||
---|---|---|---|
Bond Profil * |
#1 · Zasláno: 21. 12. 2012, 22:37:20
Ahoj, mám takový blbý amatérský problém. Nejdou mi spojit pole.
$a = array("A", "B", "C"); $b = array("X", "Y", "Z"); $c = $a+$b; echo var_dump($c); Prosím poradte mi co s tím, mám za to že tohle jsem už použil několikrát a fungovalo to a najednou to nejde... Díky za radu :) |
||
pcmanik Profil |
#2 · Zasláno: 21. 12. 2012, 23:58:25
Bond:
Na spojovanie polí existuje funkcia. |
||
Bond Profil * |
#3 · Zasláno: 22. 12. 2012, 00:04:52
No jo, jenomže když budu mít pole s číselnými indexy, tak mi je nezachová, ale změní a to bych nerad.
|
||
Jan Tvrdík Profil |
Bond:
Dej příklad, jak se to má chovat. |
||
Bond Profil * |
#5 · Zasláno: 22. 12. 2012, 00:13:54
Například takto:
$a = array(5 => "A", 4 => "B", 3 => "C"); $b = array(8 => "X", 6 => "Y", 2 => "Z"); $c = $a+$b; echo var_dump($c); |
||
Jan Tvrdík Profil |
#6 · Zasláno: 22. 12. 2012, 00:20:20
Bond:
Tak se to teď chová, kde je problém? |
||
Bond Profil * |
#7 · Zasláno: 22. 12. 2012, 00:23:56
Ajo...no problém je v tom prvním příkladu, ten nefunguje. Já to chci mít jako jednu funkci na spojování řetězců, na to první sice funguje array_merge, ale na tento druhý ne, na to zase funguje +, není něco co jde na oboje?
|
||
Jan Tvrdík Profil |
#8 · Zasláno: 22. 12. 2012, 00:29:03
Bond:
Ach jo, s tebou je problém. Co čekáš, že ti teda ten první příklad vypíše? |
||
Bond Profil * |
#9 · Zasláno: 22. 12. 2012, 00:31:52
A, B, C, X, Y, Z, prostě spojí dvě pole...
|
||
pcmanik Profil |
#10 · Zasláno: 22. 12. 2012, 00:32:31
Bond:
Kebyže si poriadne prečítaš tú dokumentáciu, tak tam máš napísané, že ak chceš zachovať tvoje indexy musíš použiť +. Lenže v prvom príspevku žiadne indexy nemáš, takže tam použiješ práve array_merge. |
||
Jan Tvrdík Profil |
#11 · Zasláno: 22. 12. 2012, 00:32:47
Bond:
Ach jo, s tebou je problém. S jakými indexy? |
||
Bond Profil * |
#12 · Zasláno: 22. 12. 2012, 00:36:44
no tohle by bylo s indexy 1 2 3 4 5 6
Není teda univerzální funkce? musím použít bud + nebo merge...? |
||
Jan Tvrdík Profil |
#13 · Zasláno: 22. 12. 2012, 00:39:59
Bond:
„Není teda univerzální funkce?“ Pokud dokážeš vymyslet, jak se ta funkce má chovat, tak ta funkce existuje. Zatím se ti to nepodařilo. Podle čeho by se ta univerzální funkce měla rozhodnout, zda indexy zachovat? Podle toho, zda množina klíčů prvního pole a množina klíčů druhého pole mají neprázdný průnik? |
||
pcmanik Profil |
Bond:
V dokumentácii sa mi nepodarilo dopátrať k inému riešeniu. Treba ešte prečítať komentáre, či niekto neriešil rovnaký problém. Tebe sa niekedy môžu vyskytnúť indexy v tých poliach a inokedy nie? Alebo aký je s tým problém? Prečo ich raz máš a potom zas nie? |
||
Jan Tvrdík Profil |
Bond:
Hádám, že hledáš něco jako (není to moc efektivní, ale pro malá pole to není problém): function universal_merge($a, $b) { $result = $a; foreach ($b as $key => $value) { if (!in_array($value, $result)) { if (array_key_exists($key, $result)) { $result[] = $value; // klíč je obsazen => použiji jiný } else { $result[$key] = $value; // klíč není obsazen, tak ho zachovám } } } return $result; } |
||
Tori Profil |
Bond:
„No jo, jenomže když budu mít pole s číselnými indexy, tak mi je nezachová, ale změní a to bych nerad.“ Pokud nezadáte indexy vůbec, jsou taky číselné. array('a','b','c') je totéž jako array(0=>'a', 1=>'b', 2=>'c') anebo i array(0=>'a', 'b', 'c') , ale php neumí rozpoznat, kterým způsobem jste to zrovna zapsal. Zajímalo by mne:
1) Proč je pro vás důležité zachovat číselné indexy, když zároveň chcete dostat do výsledného pole všechny hodnoty (z čehož vyplývá, že v případě kolize indexů se jeden z nich musí přečíslovat)? 2) Pokud bude v obou polích (pod jiným indexem) stejná hodnota, chcete ji mít ve výsledku několikrát, nebo vyhodit (viz [#15])? 3) Kde se ta pole berou, jak je vytváříte? Nedá se rovnou pracovat s jediným polem? 4) edit: Jaký výsledek má dát sloučení těchto dvou polí (jde mi o ten duplicitní index 2): $a = array(8 => 'x', 2 => 'y', 5 => 'z'); $b = array('a', 'b', 'c'); |
||
Časová prodleva: 11 let
|
0