Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-foreach返回重复条目_Php_Arrays_Loops_Foreach - Fatal编程技术网

PHP-foreach返回重复条目

PHP-foreach返回重复条目,php,arrays,loops,foreach,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'] == '

我有一个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];
            }
        }

知道为什么要这么做吗?进行了几次调试,但没有任何线索…

因为当
$value['type']
对于任何
if
语句都不相等时,您的代码在
$param
之前的
$a/$b
值中设置。试试这个:

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

因为当
$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];
            }
        }
    }
解决了它,提出:

$param[] = [$a => $b];
在每个if验证中。 $param数组中不再有重复值。

解决了此问题,将:

$param[] = [$a => $b];
在每个if验证中。
$param数组中不再有重复值。

能否显示变量转储($param[])的结果。?(您可以编辑您的问题)请提供一些样本数据,尽管两者之间存在差异,您可以检查我知道差异,但这里没有不匹配,这里清楚地知道我们正在匹配
string
string
@Exterminator顺便说一句,当您对该帖子发表评论时,我正在阅读同一篇帖子,您可以显示
var\u dump的结果吗($param[])
?(您可以编辑您的问题)请提供一些样本数据,尽管两者之间存在差异,您可以检查我知道差异,但这里没有不匹配,这里清楚地知道我们正在匹配
字符串
字符串
@Exterminator顺便说一句,当您对该帖子发表评论时,我正在阅读同一篇帖子,我认为不会有任何变化,因为
>value['type']=='input'
value['type']=='input'
都是
TRUE
我认为不会有任何变化,因为
value['type']=='input'
value['type']=='input'
两者都是
TRUE
您没有必要复制代码。检查此项并复制此解决方案:嗨,Andre,Dmytro似乎回答了您的问题。如果是这样,您可以删除您的答案并接受他的答案。非常感谢…正确答案已检查:)您没有必要复制代码。检查此项并复制此解决方案:嗨,Andre,看来Dmytro回答了您的问题。如果是这样的话,你可以删除你的答案并接受他的答案。非常感谢。。。正确答案勾选:)