php array_filter возвращает пустой массив на массив объектов

я хочу отфильтровать список объектов с небольшим обратным вызовом, получил это странное поведение на этом небольшом куске кода:

var_dump($product_categories[90]->slug);
var_dump($last_part);
var_dump($last_part==$product_categories[90]->slug);
$req_obj = array_filter($product_categories,
function($a)
{
if ((string)$a->slug == $last_part) return true;
});
var_dump($req_obj);

это дает вывод, как это, не могу понять, почему окончательный массив $ req_obj пуст? : /

string 'bobby' (length=5)
string 'bobby' (length=5)
boolean true
array (size=0)
empty

var_dump of $ product_categories:

array (size=177)
0 =>
object(stdClass)[5988]
public 'term_id' => string '38' (length=2)
public 'name' => string 'bobby' (length=22)
public 'slug' => string 'bobby' (length=12)
public 'term_group' => string '0' (length=1)
public 'term_taxonomy_id' => string '1369' (length=4)
public 'taxonomy' => string 'product_cat' (length=11)
public 'description' => string '...'
public 'parent' => string '0' (length=1)
public 'count' => int 591
public 'meta_id' => string '1519' (length=4)
public 'woocommerce_term_id' => string '38' (length=2)
public 'meta_key' => string 'order' (length=5)
public 'meta_value' => string '1' (length=1)
1 =>
object(stdClass)[5983]
...

0

Решение

$last_part выходит за рамки:

function($v) use($last_part){
return $v->slug == $last_part;
}
2

Другие решения

Попробуй это:

 var_dump($product_categories[90]->slug);
var_dump($last_part);
var_dump($last_part==$product_categories[90]->slug);
$req_obj = array_filter($product_categories[90]
function($a) use ($last_part)
{
if ((string)$a->slug == $last_part) return true;
});
var_dump($req_obj);
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector