| Autor | Zpráva | ||
|---|---|---|---|
| ts_istudio Profil |
Mám proměnnou $config, ve které je spousta údajů. Potřeboval bych získat všechny hodnoty pod $config['inc_web_popis']. Níže uvedené php vypíše:
inc_web_popis ** -Array inc_xxx ** -Array Já bych ale potřeboval hledat v té poslední úrovni indexů (v příkladu 1-4, 25-27) a když najdu, vrátit odpovídající řetězec "kat" nebo "subkat" a hodnotu ("úvodní strana"). Že je to prasárna, to vím. Je to v projektu, který jsem převzal a není možné to udělat slušně. To číslo (1-4, 25-27) je v celém $config['inc_web_popis'] unikátní. $config['inc_web_popis']['kat'][1] = "úvodní strana";
$config['inc_web_popis']['kat'][2] = "služby";
$config['inc_web_popis']['kat'][3] = "kontakt";
$config['inc_web_popis']['kat'][4] = "sortiment";
$config['inc_web_popis']['subkat'][25] = "sortiment";
$config['inc_web_popis']['subkat'][26] = "sortimfdgdfhent";
$config['inc_web_popis']['subkat'][27] = "sdfsdfsortiment";
$config['inc_xxx'][10] = "odkazy";
$config['inc_xxx'][2] = "fgdus";
$config['inc_xxx'][3] = "dkddd";
echo getDruh($config);
function getDruh($input){
foreach ($input as $key => $value) {
if ( is_array($cell)) {
$w .= " *** <br>";
getDruh($value);
} else {
$w .= $key." ** -".$value."<br>";
}
}
return $w;
} |
||
| tiso Profil |
#2 · Zasláno: 21. 6. 2013, 13:13:00
Neviem, či som to správne pochopil, myslíš toto:
$w = '';
foreach ($config['inc_web_popis']['kat'] as $value) {
$w .= "kat ** -$value<br>";
}
foreach ($config['inc_web_popis']['subkat'] as $value) {
$w .= "subkat ** -$value<br>";
} |
||
| ts_istudio Profil |
#3 · Zasláno: 21. 6. 2013, 13:25:05
tiso:
Možná jsem měl napsat, že já ty řetězce "kat" a "subkat" obecně neznám. Takže potřebuju naslepo projít všechno, co je pod $config['inc_web_popis']. Teď uvažuju, jestli to vůbec jde. |
||
| peta Profil |
http://www.php.net/manual/en/ref.array.php
http://www.php.net/manual/en/function.array-search.php http://www.php.net/manual/en/function.in-array.php foreach se da napsat tez takto (jestli jsi se dival na mozna reseni v manualu...) foreach ($config as $key=>$value) {
$w .= "$key => $value<br>";
}<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}
?> |
||
| ts_istudio Profil |
#5 · Zasláno: 21. 6. 2013, 13:58:44
peta:
Tvoje rady jsou tak přínosné, jako obvykle. Ještě jednou si přečti ten můj text a zamysli se, jestlis napsal něco, co nevím. |
||
| juriad Profil |
#6 · Zasláno: 21. 6. 2013, 14:10:08
Pokud víš, že ten index bude unikátní, tak by ti mohlo pomoct následující:
function doFlatten($pole, $klice, &$vysledek) {
foreach ($pole as $klic => $hodnota) {
$noveKlice = $klice;
$noveKlice[] = $klic;
if(is_array($hodnota)) {
doFlatten($hodnota, $noveKlice, $vysledek);
} else {
$vysledek[$klic] = array('hodnota' => $hodnota, 'klice' => $noveKlice);
}
}
}
function flatten($pole) {
$vysledek = array();
doFlatten($pole, array(), $vysledek);
return $vysledek;
}přechroustá pole do podoby: Array ( [1] => Array ( [hodnota] => úvodní strana [klice] => Array ( [0] => inc_web_popis [1] => kat [2] => 1 ) ) [2] => Array ( [hodnota] => fgdus [klice] => Array ( [0] => inc_xxx [1] => 2 ) ) [3] => Array ( [hodnota] => dkddd [klice] => Array ( [0] => inc_xxx [1] => 3 ) ) [4] => Array ( [hodnota] => sortiment [klice] => Array ( [0] => inc_web_popis [1] => kat [2] => 4 ) ) [25] => Array ( [hodnota] => sortiment [klice] => Array ( [0] => inc_web_popis [1] => subkat [2] => 25 ) ) [26] => Array ( [hodnota] => sortimfdgdfhent [klice] => Array ( [0] => inc_web_popis [1] => subkat [2] => 26 ) ) [27] => Array ( [hodnota] => sdfsdfsortiment [klice] => Array ( [0] => inc_web_popis [1] => subkat [2] => 27 ) ) [10] => Array ( [hodnota] => odkazy [klice] => Array ( [0] => inc_xxx [1] => 10 ) ) ) |
||
| DarkMeni Profil |
function getDruh($input){
foreach ($input as $key => $value) {
if ( is_array($cell)){
$w .= " *** <br>";
getDruh($value);
} else {
$w .= $key." ** -".$value."<br>";
}
}
return $w;
}A nebo jednodušší verze by byla třeba: var_dump($array); Jestli v tom chceš vyhledávat nějakej text, tak bys mohl zkusit, jestli by to nešlo udělat třeba takto: function getDruh($input, $find){
$w = "";
$f = array();
foreach ($input as $key => $value) {
if (is_array($value)){
$w .= " *** <br>";
getDruh($value); // Tohle je špatně, chtělo by to tu nějak pořešit tu rekurzi
} else {
if($find == $value){
$f[] = $key;
}
$w .= $key." ** -".$value."<br>";
}
}
return array($w, $f);
} |
||
| mylan Profil |
Použiť funkciu na rekurzívne hľadanie vo viacrozmernom poli, napríklad odtiaľto a upraviť si ju.
|
||
| tiso Profil |
#9 · Zasláno: 21. 6. 2013, 14:40:43
ts_istudio: aha, tak si to uprav takto:
getDruh($config['inc_web_popis']);
function getDruh($input){
$w = '';
foreach ($input as $key => $value) {
foreach ($value as $value2) {
$w .= $key." ** -".$value2."<br>";
}
}
return $w;
} |
||
| peta Profil |
ts_istudio: Ok. Polopate. Pomoci array_keys ziskas seznam klicu v nejblizsi vetvi. Pomoci in_array mezi nimi vyhledas ten, ktery te zajima. Pokud tam neni, tak pomoci foreach, kteremu predas seznam klicu a objekt, projdes opet vsechny klice a provedes celou funkci s hledanim klice znovu. A tak dal pro vsechny klice.
A jestli se chces nad nekoho povysovat, mohl by sis uvedomit, ze ja tu rekurzivni funkci napsat umim a ty ne. |
||
| ts_istudio Profil |
#11 · Zasláno: 21. 6. 2013, 16:26:13
Tak nakonec to bylo jednodušší, než jsem myslel. Použil jsem postup od tiso, díky moc, i ostatním, kteří se nad tím zamysleli.
|
||
|
Časová prodleva: 13 let
|
|||
0