| Autor | Zpráva | ||
|---|---|---|---|
| Jirik |
#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 |
#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 |
#6 · Zasláno: 4. 5. 2012, 15:36:58 · Upravil/a: peta
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 |
#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 |
#8 · Zasláno: 4. 5. 2012, 21:32:13 · Upravil/a: Borius
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 |
#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 |
#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 |
#12 · Zasláno: 5. 5. 2012, 10:43:17 · Upravil/a: Casero
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 |
#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 |
#14 · Zasláno: 5. 5. 2012, 11:07:50 · Upravil/a: Borius
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 |
#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: 1 rok
|
|||