<?php
$resultset = [ // query just once, collect the full tree
["ID" => 1, "Name" => "News", "Father" => 0],
["ID" => 2, "Name" => "Articles", "Father" => 0],
["ID" => 3, "Name" => "Politics", "Father" => 1],
["ID" => 4, "Name" => "Politics", "Father" => 2],
["ID" => 5, "Name" => "World", "Father" => 3],
["ID" => 6, "Name" => "World", "Father" => 4]
];
$path = "/News/Politics/World";
// $path = "/Articles/The Funnies/Garfield"; // a test case that fails
// News: parent = 0, id = 1 // \
// Politics: parent = 1, id = 3 // > the intended logic
// World: parent = 3, id = 5 // /
$cfg['categories_separator'] = "/";
$breadcrumbs = explode($cfg['categories_separator'], trim($path, "/"));
// var_export($breadcrumbs); // see what is generated
$parent = 0; // default value
foreach ($breadcrumbs as $crumb) {
$id = false; // set invalid value for success check
foreach ($resultset as $row) {
if ($row["Name"] == $crumb && $parent == $row["Father"]) { // qualifying match
$id = $parent = $row["ID"]; // dual declaration
break; // break inner loop, progress to next $crumb
}
}
if (!$id) { // inner loop failed to find qualifying match
echo "Uh-oh, Broken Breadcrumb Path -- $crumb not found in $path\n";
break; // break outer loop, path is invalid
}
// echo "ID = $id for $crumb\n"; // uncomment to see progress
}
echo "ID = $id for $crumb\n"; // echo the result
preferences:
14.39 ms | 405 KiB | 5 Q