Autor Zpráva
Jirik
Profil *
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
Profil *
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
Profil *
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
Profil *
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
Profil *
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 *
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
Profil *
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

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: