Vyhledávání ve vícerozměrném poli v jazyce PHP

Zvládnutí vyhledávání ve vícerozměrných polích v jazyce PHP Vyhledávání ve vícerozměrném poli je v jazyce PHP běžnou úlohou při práci se strukturovanými daty, jako jsou odpovědi r...

Světlý režim slouží jen pro ukázku funkcionality. Proto používejte tmavou verzi webu.

15. 10. 2025

Vyhledávání ve vícerozměrném poli v jazyce PHP

Zvládnutí vyhledávání ve vícerozměrných polích v jazyce PHP

Vyhledávání ve vícerozměrném poli je v jazyce PHP běžnou úlohou při práci se strukturovanými daty, jako jsou odpovědi rozhraní API, konfigurační pole nebo datové sady. V tomto článku se budeme zabývat všemi praktickými metodami, jak efektivně a přesně vyhledávat ve vícerozměrném poli.

1. array_column() + array_search()

Použijete, pokud máte pole asociativních polí a chcete, aby první shoda byla podle určitého sloupce.

$users = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie'],
];
 
// get the numeric key of the first element whose 'name' === 'Bob'
$keys = array_column($users, 'name');
$key = array_search('Bob', $keys, true); // use strict mode when you care about types
 
if ($key !== false) {
echo "User found: ID " . $users[$key]['id'];
} else {
echo "User not found.";
}

Poznámky:

  • array_column() extrahuje ze vstupu sloupec s hodnotou; volitelně lze zadat třetí parametr, který vrátí pole s indexem podle jiného sloupce.
  • array_search() vrátí první odpovídající klíč nebo false pokud není nalezen; použijte třetí ($strict) vynutit === srovnání.

2. foreach smyčka

Pokud potřebujete vyhledávat podle více kritérií nebo na více úrovních, jednoduchá smyčka vám poskytne plnou kontrolu.

$products = [
['id' => 10, 'name' => 'Laptop', 'category' => 'Electronics'],
['id' => 11, 'name' => 'Desk', 'category' => 'Furniture'],
['id' => 12, 'name' => 'Chair', 'category' => 'Furniture'],
];
 
$result = null;
foreach ($products as $product) {
if ($product['id'] === 11) {
$result = $product;
break;
}
}
 
if ($result) {
echo "Product found: {$result['name']}";
} else {
echo "Product not found.";
}

Tento přístup je nejflexibilnější, můžete přidávat složité podmínky, vnořené kontroly nebo částečné shody. Je také jednodušší na ladění.

3. array_filter()

array_filter() vrátí všechny prvky, pro které zpětné volání vrátí true. Klíče jsou zachovány; použijte array_values() přeindexovat, pokud chcete mít výsledné pole s nulou.

$itEmployees = array_filter($employees, function($employee) {
return isset($employee['department']) && $employee['department'] === 'IT';
});

array_filter() přijímá volitelný režim pro předání klíčů zpětnému volání; ve výchozím nastavení klíče zachovává.

4. Rekurzivní vyhledávání hluboko vnořených polí (podle klíče/hodnoty)

Pokud je hloubka struktury nepředvídatelná, použijte rekurzivní funkci, která zkoumá každou úroveň. Tento příklad vrací první odpovídající kontejner (asociativní pole), které obsahuje daný key => value dvojice.

function searchArrayByKeyValue(array $haystack, string $key, $value) {
foreach ($haystack as $element) {
if (!is_array($element)) {
continue;
}
 
if (array_key_exists($key, $element) && $element[$key] === $value) {
return $element;
}
 
// Recurse into nested arrays
$found = searchArrayByKeyValue($element, $key, $value);
if ($found !== null) {
return $found;
}
}
 
return null;
}

Poznámky k provádění:

  • Použijte array_key_exists() když potřebujete zjistit klíče, které existují s null hodnoty. Použijte isset() pro kontroly, které nejsou nulové.
  • Použijte striktní porovnávání (===), pokud nechcete záměrně použít vynucení typu.

5. Rekurzivní vyhledávání pouze podle hodnoty (libovolný klíč)

Kontrola, zda skalární hodnota existuje kdekoli ve vícerozměrné struktuře:

function inMultiArray($needle, array $haystack): bool {
foreach ($haystack as $value) {
if (is_array($value)) {
if (inMultiArray($needle, $value)) {
return true;
}
continue;
}
 
if ($value === $needle) { // strict comparison
return true;
}
}
 
return false;
}
 
$array = [
['x' => [1, 2, 3]],
['y' => [4, 5, 6]],
];
 
var_dump(inMultidimensionalArray(5, $array)); // true

Pokud potřebujete testovat pouze hodnoty nejvyšší úrovně, upřednostněte možnost in_array() s $strict vlajka. Pro hluboké struktury použijte rekurzi.

6. Vyhledávání podle více podmínek

Kontroly můžete kombinovat uvnitř array_filter() nebo smyčky. Příklad použití array_filter() najít studenty s grade === 'A' a age === 18:

$students = [
['name' => 'Sara', 'grade' => 'A', 'age' => 17],
['name' => 'Tom', 'grade' => 'B', 'age' => 18],
['name' => 'Liam', 'grade' => 'A', 'age' => 18],
];
 
$result = array_filter($students, function($student) {
return $student['grade'] === 'A' && $student['age'] === 18;
});
 
print_r($result);

Výkonnost a osvědčené postupy

  • Vestavěné funkce (array_column, array_search, array_filter) jsou implementovány v jazyce C a jsou často rychlejší a přehlednější než ekvivalentní smyčky PHP. V případě potřeby je používejte.
  • Preferuji ===/přísné porovnávání při porovnávání hodnot z externích zdrojů, aby nedocházelo k překvapivým shodám.
  • array_filter() zachovává klíče, zavolejte array_values() pokud se spoléháte na číselné, souvislé indexy.
  • Pro velmi rozsáhlé soubory dat zvažte použití generátorů (yield) nebo streamování namísto načítání všeho do paměti.

Souhrnná tabulka

Úkol Doporučený přístup
Jednotlivá shoda podle sloupce (jedna úroveň) array_column() + array_search()
Všechny zápasy s podmínkou array_filter() (pak array_values() v případě potřeby)
Komplexní/vícepolová logika foreach s break/continue
Neznámé hloubkové vyhledávání podle klíče/hodnoty Rekurzivní vyhledávací funkce
Hodnota existuje kdekoli Rekurzivní inMultiArray() or in_array() pro mělká pole

Původní článek publikoval Nabil Hassen.

Mohlo by vám pomoct

Praktické věci kolem webu

Než se pustíte do webu, hodí se mít jasno v podkladech, WordPressu, cookies a měření.

Google reference

Co říkají klienti

Ukázky skutečných recenzí, které klienti zanechali na mém Google profilu.

Přejít na recenze
★ ★ ★ ★ ★

„Člověk, který své práci a rozumí a ví co dělá. Velmi rychlá komunikace a profesionální přístup. Doporučuji.“

Jaroslav Kupča
Google
★ ★ ★ ★ ★

„Skvělá spolupráce, při dalších projektech určitě nebudu shánět někoho jiného.“

Roman Koňařík
Google
★ ★ ★ ★ ★

„S panem Vančurou jsem spolupracovala na tvorbě mých webových stránek a jsem maximálně spokojená. Oceňuji profesionální přístup, rychlou komunikaci a schopnost přesně pochopit moje představy. Web je moderní, přehledný, funkční a skvěle vypadá i na mobilu. Celý proces proběhl hladce, s jasným vysvětlením jednotlivých kroků a výborným výsledkem. Určitě doporučuji každému, kdo hledá spolehlivý a kvalitní přístup.“

Barbora Zemánková
Google
★ ★ ★ ★ ★

„Spolupráce při tvorbě konfigurátoru proběhla naprosto bez problémů. Oceňuji profesionální přístup, rychlou komunikaci a schopnost pochopit specifický projekt od A do Z. Konfigurátor je přehledný, funkční a přesně odpovídá mým požadavkům. Rozhodně doporučuji.“

mareksevcik_FPV
Google
★ ★ ★ ★ ★

„Velmi dobrá a rychlá spolupráce. Doporučuji!“

Leoš Kaucký
Google
★ ★ ★ ★ ★

„Přesně takto si představujeme profesionální práci. Dekujeme“

STAVILLI
Google
★ ★ ★ ★ ★

„Ať už se jedná o optimalizaci webu, nebo tvorbu na míru oceňuji kromě profesionální práce a znalostí problematiky také férový přístup a komunikaci.“

Aleš Illický
Google
★ ★ ★ ★ ★

„Děkuji za profesionální spolupráci, vše dle domluvy, naprostá spokojenost a mohu jen vřele doporučit.... Při dalších projektech určitě opět využiji Vašich služeb“

Peter Spilak
Google
★ ★ ★ ★ ★

„Profesionalita a velká ochota, nemohu jinak než doporučit“

Magdalena Vašková
Google
★ ★ ★ ★ ★

„Skvělá zkušenost při tvorbě webu, profesionální přístup, rychlost, ochota pomoci“

Jana Kono
Google
★ ★ ★ ★ ★

„Rychlá spolupráce a komunikace – mohu jen doporučit.“

Gawix
Google
★ ★ ★ ★ ★

„Moc mi pomohl, když jsem potřebovala pomoc s webem. A bylo to gratis :)). Jsem mu neskonale vděčná.“

Radka Arbesová
Google
★ ★ ★ ★ ★

„Děkuji Jiřímu za rychlou a kvalitní spolupráci na tvorbě webu. Srozumitelná a ochotná komunikace mě vždycky potěší a přináší důvěru.“

Jiří Mařík
Google
★ ★ ★ ★ ★

„Jsem maximálně spokojená. Rychlost, ochota a cenově dostupné. Děkuji“

Veronika Černá
Google
★ ★ ★ ★ ★

„Naprostá spokojenost. Rychlá komunikace, skvělá cena a odborná pomoc. Moc děkuji :)“

Patricie Kučerová
Google
★ ★ ★ ★ ★

„Velká spokojenost, rychlost a p. Vančura moc dobře ví co dělá. :)“

Ondřej Daniško
Google
★ ★ ★ ★ ★

„dobrá práce, rychlá odezva“

Zuzana Jírová
Google
★ ★ ★ ★ ★

„S programátory mám zkušeností hodně, ale tady musím opravdu pochválit. Pro mě a mé přátele vytvořil skvělý nástroj na evidenci sbírek a opravdu se to povedlo. Bylo to hotové rychle, kvalitně a za skvělou cenu. Komunikace funguje velmi rychle, což je super a ne úplně standard. Díky za super práci, za mě 100% spokojenost!“

Zdeněk
Google
★ ★ ★ ★ ★

„Vše bylo rychlé a hlavně to funguje. Dobrá práce.“

Lukáš Bartášek
Google
★ ★ ★ ★ ★

„Normálně recenze nepíši, ale zde rád doporučím kvalitní práci. Jiří pro mě vytvořil web pro dětské tábory. Kvalitní práce, rychlá komunikace a vlastní nápady, které Jiří sám přidá, jsou na velice vysoké úrovni. Nemohu hodnotit jinak než 5/5.“

Tomáš Loněk
Google
★ ★ ★ ★ ★

„Pan Jiri nam delal jiz 3 webove stranky a vzdy velka spokojenost, je mega rychly a vse hned kladne vyridi, mohu pouze doporucit. Poradi si bez problemu i s rezervacnimi kalendaremi, udrzbou socialnich siti, atd.“

Barbara Mašková
Google