PHP - foreach возвращает повторяющиеся записи - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть цикл foreach, возвращающий дублирующиеся записи из строки массива без дубликатов внутри него.

Код:

$a = [];
        $b = [];
        foreach($categories['results'][0]['parameters'] as $key => $value) {
            if(in_array($value['code'], $input_valid_names)) {
                if($value['type'] == 'input') {
                    $a = $value['code'];
                    $b = $PostData[$value['code']];
                }
                if($value['type'] == 'select'){
                    $a = $value['code'];
                    $b = $PostData[$value['code']];
                }
                if($value['type'] == 'checkbox' && !empty($PostData[$value['code']])){
                    $a = $value['code'];
                    $b = 'Sim';
                }
                $param[] = [$a => $b];
            }
        }

Есть идеи, почему он это делает?Сделано несколько отладок, но без подсказки ...

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Потому что, когда $value['type'] не равно для любого оператора if, ваш код устанавливает $param предыдущее значение $a/$b. Попробуйте это:

    $param = [];
    foreach($categories['results'][0]['parameters'] as $key => $value) {
        $a = false;
        $b = false;
        if(in_array($value['code'], $input_valid_names)) {
            if($value['type'] == 'input') {
                $a = $value['code'];
                $b = $PostData[$value['code']];
            }
            if($value['type'] == 'select'){
                $a = $value['code'];
                $b = $PostData[$value['code']];
            }
            if($value['type'] == 'checkbox' && !empty($PostData[$value['code']])){
                $a = $value['code'];
                $b = 'Sim';
            }
            if($a and $b){
                $param[] = [$a => $b];
            }
        }
    }
0 голосов
/ 13 сентября 2018

Решил, поставив:

$param[] = [$a => $b];

внутри каждой проверки. Больше нет повторяющихся значений в массиве $ param.

0 голосов
/ 13 сентября 2018
$a = '';
    $b = '';
    $param = array();
    foreach ($categories['results'][0]['parameters'] as $key => $value) {
        if (in_array($value['code'], $input_valid_names)) {
            if ($value['type'] === 'input') {
                $a = $value['code'];
                $b = $PostData[$value['code']];
            }else if ($value['type'] === 'select') {
                $a = $value['code'];
                $b = $PostData[$value['code']];
            }else if ($value['type'] === 'checkbox' && !empty($PostData[$value['code']])) {
                $a = $value['code'];
                $b = 'Sim';
            }
            $param[] = [$a => $b];
        }
    }
...