Autor | Zpráva | ||
---|---|---|---|
Jirik Profil * |
#1 · Zasláno: 4. 5. 2012, 11:30:01
Dobrý den, snažím se propojit dvě pole tak, aby hodnoty z prvního pole byly klíče ve finálním poli. Mám takovýto kod, ale nějak mi nefunguje. Zkoušel jsem to dělat i pomocí dvou forů a taky to nešlo
$keyA = array("A","B"); $valueA = array("Ahoj","Cau"); foreach($keyA as $key){ foreach($valueA as $value) { $result = array($key=>$value); } } |
||
Mike8748 Profil |
#2 · Zasláno: 4. 5. 2012, 11:32:59
Jirik:
$result=array_combine($keyA,$valueA); |
||
Jirik Profil * |
#3 · Zasláno: 4. 5. 2012, 11:59:08
No nějak to nefunguje, vrací mi to tohle:
Warning: array_combine() expects parameter 1 to be array, string given in Kod vypadá zhruba takto: Pole(array("Index1*" => "Ahoj","Index2*"=>"Cau")) //* znamena pomocny znak - po odstaneni se vytvori nove pole kde bude array("Index1"=>"Ahoj")... function Pole($data = array()) { foreach($data as $key=>$value) { //z klice se odstranuji nejake pomocne znaky $key = substr($key.....); return $pole = array_combine($key,$value); } } |
||
Majkl578 Profil |
#4 · Zasláno: 4. 5. 2012, 14:06:59
[#3] Jirik:
Přečti si tu chybovou hlášku. 1. parametr má být pole, ty tam ale cpeš string. |
||
Mike8748 Profil |
#5 · Zasláno: 4. 5. 2012, 14:55:19
Jirik:
evidentně si to celé blbě pochopil. Ohledně kódu v [#3]: proč tam máš cyklus foreach když hned při prvním průchodu ho ukončíš pomocí return ? jinak, to co jsem napsal v [#2] je náhrada toho tvého pokusu s dvojitým foreach, ne něco co jsi měl doplnit. pokud trváš na dvojitém foreach, tak zhruba takto $data=array("Index1*" => "Ahoj","Index2*"=>"Cau"); function pole($data=array()) { $result=array(); foreach ($data as $key=>$value) { $key=substr($key,...); $result[$key]=$value; } return $result; } |
||
peta Profil |
Jirik: Mrkni v dokumentaci na priklady pouziti
http://cz.php.net/function.array_combine (nebo kliknes na link v kodu, co ti ve [#2] poslal Mike8748) Example #1 A simple array_combine() example <?php $a = array('green', 'red', 'yellow'); $b = array('avocado', 'apple', 'banana'); $c = array_combine($a, $b); print_r($c); ?> The above example will output: Array ( [green] => avocado [red] => apple [yellow] => banana ) |
||
Jirik Profil * |
#7 · Zasláno: 4. 5. 2012, 20:45:33
Ok, ten příklad byl dost blbý, psal jsem ho v rychlosti a nepřemýšlel nad tím, return tam samozřejmě nemám.
Ale pořád to nefunguje. Mám něco takovýho: $keys = array("Klic1","Klic2","Klic3"); $values = array("Hodn1","Hodn2","Hodn3"); $data = array(); foreach($keys as $key) foreach($values as $value){ $data[$key] = $value; } foreach($data as $key=>$value) echo $key."/".$value."<br>"; Klic1/Hodn3 Klic2/Hodn3 Klic3/Hodn3 |
||
Borius Profil |
Tvůj kód dělá s každým z $keys toto:
Vytvoří proměnnou $data[$key] a této proměnné přiřadí první hodnotu z $values, pak druhou, nakonec třetí. Čili, nakonec je v této proměnné naposledy přiřazená hodnota, tzn. vždycky to bude ‘Hodn3’. To asi nechceš… |
||
Jirik Profil * |
#9 · Zasláno: 4. 5. 2012, 22:00:39
No právě, to vím taky co to dělá, ale nevím jak to udělat tak, aby to bylo Klic1 = Hodn1, Klic2 = Hodn2...
|
||
Borius Profil |
#10 · Zasláno: 4. 5. 2012, 22:17:33
Jirik:
A Tobě se nehodí řešení [#2] Mike8748? $keys = array("Klic1","Klic2","Klic3"); $values = array("Hodn1","Hodn2","Hodn3"); $pole=array_combine($keys,$values); |
||
Jirik Profil * |
#11 · Zasláno: 5. 5. 2012, 10:27:57
No tohle je právě spojení dvou polí. Já mám celý program ve foreachu a potřebuju z key a value z foreachu sestavit nové pole. Takže potřebuju nějakou funkci, která bude schopná přidávat do pole string. ona je nějaká funkce push, ale ta zase nefunguje na přidávání klíč - hodnota.
|
||
Casero Profil |
V php můžeš přidávat prvky do pole takto:
$result[$key]=$value; EDIT: šlo mi jen o to, že není potřeba pro přidání prvku do pole jako v jiných jazycích něco ošéfovat. |
||
Jirik Profil * |
#13 · Zasláno: 5. 5. 2012, 10:59:16
No ale to už jsem zkoušel viz příspěvek #7. jako hodnota v tom poli bude poslední záznam.
|
||
Borius Profil |
Casero:
Tím by vzniklo chybné $result['A']=$result['B']='Cau'; Jirik: A což takto: for ($i=0; $i<count(keys); $i++) { $$keys[$i]=$values[$i]; } $Klic1='Hodn1'; $Klic2='Hodn2'; $Klic3='Hodn3'; |
||
Casero Profil |
#15 · Zasláno: 5. 5. 2012, 11:09:15
Asi máš nějaké důvody, proč tam chceš ty dva foreache. Nevyužíváš rady předchozích rádců.
$keys = array("Klic1","Klic2","Klic3"); $values = array("Hodn1","Hodn2","Hodn3"); $data = array(); foreach ($keys as $key => $next_key) $data[$next_key] = $values[$key]; foreach($data as $key=>$value) echo $key."/".$value."<br>"; |
||
Mike8748 Profil |
#16 · Zasláno: 5. 5. 2012, 11:16:52
no... popravdě teď už ani nevím o co se vlastne Jirik snaží... jeho popis(a kód) v [#1] a [#3] a [#7] je dost různý.
takže... pokud jde o zkombinování polí (použít hodnoty jednoho pole jako klíč pro hodnoty druhého pole) tak použít pouze array_combine() pokud hodnoty z prvního pole (tedy klíče pro výsledek) mají být nějak upraveny (viz. ty náznaky se substr apod) tak jedním foreach projít první pole, a sestavit nové pole, s upraveným výsledkem substr...něco jako $keys = array("Klic1","Klic2","Klic3"); $values = array("Hodn1","Hodn2","Hodn3"); $data = array(); $newKeys=array(); foreach ($keys as $k) { $newKeys[]=substr($k,...); } $data=array_combine($newKeys,$values); print_r($data); Jirik: Pokud se pokoušíš o něco jiného, tak sem napiš o co přesně, tedy očekávaný vstup a výstup. Takhle se těžko radí když nenapíšeš co přesně chceš |
||
Jirik Profil * |
#17 · Zasláno: 5. 5. 2012, 14:32:03
Tak už to funguje, nakonec jsem použil to co psal Casero v #15.
ale tím combine by to také šlo. nejprve by se přidávali hodnoty do těch dvou polí a ty by se potom tím combine spojili. No každopádně moc děkuju za pomoc |
||
Časová prodleva: 12 let
|
0