Autor Zpráva
Jirik
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);
                }
            }
Děkuji za radu
Mike8748
Profil
Jirik:
$result=array_combine($keyA,$valueA);
Jirik
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
[#3] Jirik:
Přečti si tu chybovou hlášku. 1. parametr má být pole, ty tam ale cpeš string.
Mike8748
Profil
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
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>";
                   
No a výpis vypadá takhle:
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
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
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
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
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];
}
Mělo by vzniknout:
$Klic1='Hodn1';
$Klic2='Hodn2';
$Klic3='Hodn3';
Pokud jsem to pochopil dobře, tak právě takovéto přiřazení chceš.
Casero
Profil
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
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
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

(Zapomenuté heslo?)

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-pět: