| Autor | Zpráva | ||
|---|---|---|---|
| Matinek88 Profil * |
#1 · Zasláno: 22. 5. 2013, 13:31:01
Dobrý den, potřebuju poradit jak najít v poli nějakou položku, která má index nějakou část řetězce:
$pole = array("pokus/pokus1/pokus/10/abc" => "pokus", "pokus/55/xyz" => "ahoj");
$hledany_retezec = "pokus/pokus1/pokus";
$pole[$hledany_retezec] // melo by vypsat slovo pokusje na to nějaká funkce? vždycky to bude všechno v tomto tvaru tedy něco/něco...ale může tam být více položek s podobnými indexy, třeba pokus/pokus1... takže aby vždycky našel ten nejdelší. Dík za radu |
||
| Tori Profil |
#2 · Zasláno: 22. 5. 2013, 13:52:30
Např. projít pole (cyklem foreach) a ukládat si klíče, které obsahují zadaný řetězec. Při nalezení dalšího vyhovujícího klíče porovnáte jeho délku s tím uloženým, delší si opět necháte.
Anebo můžete pole seřadit podle délky klíče a toho, jestli obsahuje zadaný řetězec, a pak si vytáhnout první položku pole (key, current). Jestli nechcete měnit pořadí prvků v původním poli, pracujte s jeho kopií. $pole = array('a/b' => 1, 'a/b/c' => 2, 'zxc' => 22, 'a' => 3, 'b/c/d/e/f/g/h' => 33, 'abcd' => 4);
$hledej = 'a';
uksort($pole, function($a, $b) use ($hledej) {
if (strpos($a, $hledej) !== false)
return (strpos($b, $hledej) !== false) ? strlen($b) - strlen($a) : -1;
return (strpos($b, $hledej) !== false);
});
var_dump($pole);array (size=6) 'a/b/c' => int 2 'abcd' => int 4 'a/b' => int 1 'a' => int 3 'zxc' => int 22 'b/c/d/e/f/g/h' => int 33 |
||
| Matinek88 Profil * |
#3 · Zasláno: 22. 5. 2013, 14:45:56
udělám to ještě jinak, budu ten řetězec zkracovat podle / od zadu a koukat do pole, jestli tam je. nevíte jak zkracovat od zadu řetězec? mělo by to být asi nějak takto:
while($cast = substring(...))
{
if(je cast v poli)
return pole[cast]
}Jak by měl ten substring vypadat? |
||
| Tori Profil |
|||
|
Časová prodleva: 13 let
|
|||
0