Почему мой цикл foreach останавливается? - PullRequest
0 голосов
/ 19 мая 2018

Я создал цикл foreach, который был адаптирован из этого сообщения на форуме .

Но он всегда останавливается после первой итерации.

Почему это происходит?

Предполагается проверить, не совпадает ли поле $ с чем-либо в массиве $ skip, а затем выполнить некоторый код.Но код выполняется только в первом цикле, а затем завершается.

function bg_calculation_save ( $pieces ) {

    $skip = array('company_name', 'logo', 'screenshot', 'highlight_1', 'highlight_2', 'highlight_3', 'awards');

    foreach ($pieces[ 'fields' ] as $field => $value) {

        if (!in_array($field, $skip)) {

            // Calculate the points
            $points = bg_calculate_points($field) * bg_score_weights($field);   

            // Set the value of the "$field_points" field
            $pieces[ 'fields' ][ $field . '_points' ][ 'value' ] = $points;

            //If the field isn't being saved right now, add it to the list to be saved
            if (!in_array( $pieces[ 'fields_active' ])) {
                $pieces[ 'fields_active' ][] = $field;
            }
            return $pieces;
        }
    }
}
add_filter( 'pods_api_pre_save_pod_item_vpn', 'bg_calculation_save' );

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Просто переместите return $pieces; за пределы цикла foreach.

0 голосов
/ 19 мая 2018

Если вы собираетесь выполнить команду, если $ field найдено, я думаю, что ваше условие должно быть

if (in_array($field, $skip))

С вашим условием

if (!in_array($field, $skip))

Если в первом цикле этоне в массиве, условие истинно, оно выполняет операторы и возвращает.Следовательно, цикл выполняет только единицы.

Если вы собираетесь обходить все поля $, если это не in_array, вы должны удалить оператор return.

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