Могу ли я использовать array_filter () для массива классов? - PullRequest
2 голосов
/ 26 октября 2009

Я пытаюсь перехватить и отфильтровать элементы из массива набора классов, $ this -> _ vars, в урезанной версии Smarty (не мой выбор: |)

Вот что я пытался использовать:

Функция обратного вызова класса

private function callback_check($var){
    if(!in_array($var['link_id'], $this->returned_array['items'])) return false;
    else return true;
}

И сам фильтр массива:

foreach($this->_vars['content']['documents'] as $group_key => $link_groups){
    array_filter($this->_vars['content']['documents'][$group_key]['links'], array(&$this, "callback_check"));
}

Теперь он, похоже, обнаруживает, какие из них находятся в массиве, а какие нет, поскольку я заменил возвращаемые значения отпечатками для проверки. Однако из массива ничего не удаляется. Есть ли способ сделать то, что я пытаюсь, или я пропустил что-то очевидное?

1 Ответ

4 голосов
/ 26 октября 2009

Я думаю, вы упустили что-то очевидное;)

array_filter() не фильтрует массив на месте, он возвращает новый отфильтрованный массив. Учитывая ваш фрагмент кода, вы не используете возвращенный массив. Попробуйте что-то вроде этого:

foreach($this->_vars['content']['documents'] as $group_key => $link_groups){
    $filtered_array = array_filter($this->_vars['content']['documents'][$group_key]['links'], array(&$this, "callback_check"));
    $this->_vars['content']['documents'][$group_key]['links'] = $filtered_array;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...