Продолжайте проходить foreach, если я однажды вернул истину - PullRequest
0 голосов
/ 07 октября 2019

Я получил этот массив внутри другого массива, который мне нужно найти / сопоставить, а затем вернуть true. Проблема в том, что foreach просто останавливается после 1-го матча.

foreach($term_data as $key => $terms){
    if (false !== $searchkey = array_search(113, array_column($terms[services], 'target_id'))){
        $handler->argument = $term_data[$key]['id'];
        return TRUE;
    }else{
        return FALSE; 
    }
}

Мой массив выглядит примерно так:

$term_data = Array (
    [0] Array (
        [id] => 35
        [name] => 'Location1'
        [services] => Array (
            [0] => Array (
                [target_id] => 112
                )
            [1] => Array (
                [target_id] => 113
            )
    )
    [1] Array (
        [id] => 36
        [name] => 'Location2'
        [services] => Array (
            [0] => Array (
                [target_id] => 109
                )
            [1] => Array (
                [target_id] => 113
            )
    )
)

Используется в Drupal Views. Мне нужно возвращать true каждый раз, когда это соответствует после установки аргумента $ handler->. Прямо сейчас это работает, но остановится после 1-го матча. Как мне просмотреть все $ term_data, выполнить поиск в массиве services, а затем вернуть term_data [id].

Это работает в другом представлении, но это не массив внутри другого:

if (false !== $key = array_search($search_name, array_column($term_data, 'name'))){
    $handler->argument = $term_data[$key]['id'];
    return TRUE;
}else{
    return FALSE;
}

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Хотите ли вы вернуть ОБА / ВСЕ значения $term_data[$key]['id'];, которые соответствуют, если это так, вам придется построить массив

// initialise before array
$handler->argument = [];

foreach($term_data as $key => $terms){
    if (false !== $searchkey = array_search(113, array_column($terms[services], 'target_id'))){
        $handler->argument[] = $term_data[$key]['id'];
    }
}

return count($handler->argument) > 0;    // true if 1 or more occurances else false
0 голосов
/ 07 октября 2019

Я думаю, что вы пытаетесь проверить $term_data на совпадение в любом из элементов массива. Если это так, не return false в цикле foreach - возвращайте false после цикла, если совпадений не найдено.

foreach($term_data as $key => $terms){
    if (false !== $searchkey = array_search(113, array_column($terms[services], 'target_id'))){
        $handler->argument = $term_data[$key]['id'];
        return TRUE;
    }
}

return FALSE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...