PHP-foreach返回重复的条目

时间:2018-09-13 09:32:44

标签: php arrays loops foreach

我有一个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 :(得分:2)

因为如果$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];
            }
        }
    }

答案 1 :(得分:0)

$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];
        }
    }

答案 2 :(得分:0)

解决了问题,放入:

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

在所有if验证内。 $ param数组中不再有重复的值。