Autor Zpráva
Bond
Profil *
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);
Výstup: array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "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
Bond:
Na spojovanie polí existuje funkcia.
Bond
Profil *
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 *
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);
Výstup: 5 => "A", 4 => "B", 3 => "C", 8 => "X", 6 => "Y", 2 => "Z"
Jan Tvrdík
Profil
Bond:
Tak se to teď chová, kde je problém?
Bond
Profil *
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
Bond:
Ach jo, s tebou je problém. Co čekáš, že ti teda ten první příklad vypíše?
Bond
Profil *
A, B, C, X, Y, Z, prostě spojí dvě pole...
pcmanik
Profil
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
Bond:
Ach jo, s tebou je problém. S jakými indexy?
Bond
Profil *
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
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');

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