Portál AbcLinuxu, 10. května 2025 06:09

Dotaz: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.

23.3.2014 20:37 Marián
PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
Přečteno: 304×
Odpovědět | Admin
Ahoj, mám ještě jeden dotaz ohledně tohoto pole
     $array = array('aaa' => array('a' => 'a-aaa', 'b' => 'b-aaa'),
                    'bbb' => array('a' => 'a-bbb', 'b' => 'b-bbb'),
                    'ccc' => array('a' => 'a-ccc', 'b' => 'b-ccc'),
                    'ddd' => array('a' => 'a-ddd', 'b' => 'b-ddd'),
                    'eee' => array('a' => 'a-ccc', 'b' => 'b-eee'));
Zkouším získat klíč podle zadaného údaje, Zkoušel jsem to
echo array_search('a-bbb', $array);
i takto
echo array_search('a-bbb', array($array));
ale vůbec nic mi nejde. Poradí někdo? Díky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.3.2014 20:51 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proč si ho raději nevytáhneš z databáze?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
23.3.2014 22:53 Marián
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
To jsem zkoušel, ale taky to nejde...
     $stmt = $db->prepare('SELECT key FROM table WHERE co = ?;');
     $stmt->execute(array('a-aaa'));
     $status = $stmt->fetch();
     echo $status['key'];
zkoušel jsem i tohle
     $stmt = $db->prepare('SELECT key FROM table WHERE co = ?;');
     $stmt->execute(array('a-aaa'));
     $status = $stmt->fetchColumn();
     echo $status['key'];
ale taky nic. Když dám var_dump($status); tak to vrací jen "bool(false)". Když dám místo key hvězdičku, tak to funguje...

Vydí tam někdo nějakou chybu? Díky
23.3.2014 23:33 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
Skutečně se ten sloupeček v databázi jmenuje "key"? Proč vlastně hledáš klíč podle hodnoty a ne obráceně? Mám takové tušení, že ten návrh aplikace máš zcela špatně.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
24.3.2014 01:40 Marián
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
Ano, opravdu se jmenuje "key". Pokud zadám místo "key" "*" tak to funguje :-( Klíč hledám podle hodnoty proto, jelikož znám daný kousek české url ale neznám fyzicky us název souboru.
Jendа avatar 24.3.2014 01:45 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
No a když to napíšeš přímo do konzole databázového serveru, tak to něco vrátí?
24.3.2014 11:34 Marián
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
Ano vrátí to chybu:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key FROM define WHERE co = a-aaa' at line 1

ale žádnou chybu nevidím..
24.3.2014 12:13 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
key je nevhodné označení sloupce rezervovaným slovem - zadej `key` .
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
24.3.2014 13:51 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.

Toto je přesně případ, proč raději vše uvozovkuji, těmi uvozovkami, které dané entitě v daném DBE přísluší. minimálně je třeba použít lepší názvy, tedy key doplnit o to co je to za key, třeba userLoginKey nebo book_category_key .

Uvozovkování předchází i problému, kde se vytvoří nové rezervované slovo, ale zas to pro někoho znepřehledňuje dotazy.

Zadej 'SELECT `key` FROM `table` WHERE `co` = ?;' (pro MySQL) a už to pojede
(Pro PostgreSQL by to bylo něco jako: 'SELECT "key" FROM "table" WHERE "co" = ?;',
pro M$SQL myslím něco jako 'SELECT [key] FROM [table] WHERE [co] = ?;').

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Jendа avatar 23.3.2014 21:17 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Protože array_search() nejde do hloubky. Zkusil bych něco jako
foreach a in $array {
  echo array_search('a-bbb', $a);
}
(pseudokód)

Pro víc polí to bude pomalé, pak bych asi uvažoval o nějaké vhodnější struktuře (strom, hashtable).
26.3.2014 12:56 Lucius
Rozbalit Rozbalit vše Re: PHP - Jak vrátit key z vnořeného pole podle známé hodnoty.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud jde o index toho vnejsiho pole tak nejak takto by to melo jit:
$source = array('aaa' => array('a' => 'a-aaa', 'b' => 'b-aaa'),
                    'bbb' => array('a' => 'a-bbb', 'b' => 'b-bbb'),
                    'ccc' => array('a' => 'a-ccc', 'b' => 'b-ccc'),
                    'ddd' => array('a' => 'a-ddd', 'b' => 'b-ddd'),
                    'eee' => array('a' => 'a-eee', 'b' => 'b-eee'));

$output=''; // index pole pro nalezenou hodnotu
$find = 'a-eee'; // hledana hodnota

array_walk(array_keys($source),create_function('$value, $key,$param', 'in_array($param[1], $param[0][$value])? $param[2] = $value: "";'),array($source,$find,&$output)); 

echo $output;

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.