【问题标题】:PHP - foreach returning duplicate entriesPHP - foreach 返回重复的条目
【发布时间】:2018-09-13 09:32:44
【问题描述】:

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

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

【问题讨论】:

  • 你能显示var_dump($param[])的结果吗? (您可以编辑您的问题)
  • 请同时提供一些示例数据
  • 两者有区别,你可以查看stackoverflow.com/questions/80646/…
  • 我知道区别,但这里没有不匹配清楚地知道我们正在匹配 stringstring @Exterminator 顺便说一句,当您评论该帖子时,我正在阅读同一篇文章 hihihihihi

标签: php arrays loops foreach


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    $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];
            }
        }
    

    【讨论】:

    • 我认为什么都不会改变,因为value['type']== 'input'value['type']==='input' 都是TRUE
    【解决方案3】:

    解决了,把:

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

    在每个 if 验证中。 $param 数组中不再有重复值。

    【讨论】:

    • 您不需要复制代码。检查这个并复制这个解决方案:stackoverflow.com/a/52311074/5907412
    • 嗨 Andre,Dmytro 似乎回答了你的问题。如果是这种情况,您可以删除您的答案并接受他的答案。
    • 非常感谢...检查了正确答案:)
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2021-12-26
    • 2022-07-21
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多