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

je 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
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 *
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
Matinek88:
nevíte jak zkracovat od zadu řetězec?
Buď pokaždé najít ofset posledního lomítka a oříznout řetězec.
Anebo můžete rozdělit hledanou URL podle lomítek do pole a pak postupně vyhazovat prvky od konce a klíč si pokaždé složit.

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: