I am looking for a solution in php as mentioned in the accepted answer of this question:
javascript - return parent with only child that matches given s
I was looking to return a result based on an exact match so have modified Manish's answer below with a third parameter of strict. Passing true will return an exact match only.
public function getParentStackComplete($search, $stack, $strict = false)
{
$results = array();
foreach ($stack as $item) {
if (is_array($item)) {
if (array_filter($item, function ($var) use ($search) {
return (!is_array($var)) ? stristr($var, $search) : false;
})) {
//echo 'test';
$results[] = $item;
if ($strict) {
if ($item['name'] === $search)
return $item;
}
continue;
} else if (array_key_exists('asset_info', $item)) {
$find_assets = array();
foreach ($item['asset_info'] as $k => $v) {
//echo 'abc ';
if (is_array($v) && array_filter($v, function ($var) use ($search) {
return stristr($var, $search);
})) {
$find_assets[] = $v;
}
}
if (count($find_assets)) {
$temp = $item;
$temp['asset_info'] = $find_assets;
$results[] = $temp;
}
}
}
}
return $results;
}