【问题标题】:How to use foreach() properly in PHP?如何在 PHP 中正确使用 foreach()?
【发布时间】:2019-03-21 13:30:50
【问题描述】:

这是我第一次用 PHP 编码。我正在尝试返回一个数组,其中包含每种现金的数量

public function test($a){
    $a = [];
        $cash = array(
            '20'   => 0,
            '30'   => 0,
            '40'   => 0,
            '50'  => 0,
            '60'  => 0,
            '70'  => 0,
            '80' => 0,
        );

        foreach($a as $k => $v) {
            if (array_key_exists("$k",$cash) && $v!= null ) {
                $cash[$k] += 1;
            }
        }

        return  $cash;
    }

当我尝试测试代码时出现错误:Invalid argument supplied for foreach()

【问题讨论】:

  • 这个函数怎么称呼?
  • 我用 PHPÙnit 测试它,我打电话给 $this->assertEquals($expected, $this->TestClass->findCashPayment($a));
  • 我看不到 foreach 在这里如何失败,因为您将 $a 重新定义为一个空数组。您确定这是您的单元测试中失败的行吗?或者您在运行测试后是否进行了任何更改?
  • 请用您的真实问题、您提供给该函数的输入以及您期望的输出来编辑您的问题
  • 如果$a 为空,foreach(循环遍历其每个元素)将什么也不做。这可能就是测试失败的原因;)

标签: php foreach


【解决方案1】:

foreach() 的第一个参数必须是一个数组。 $a 不是数组 另请注意,您正在尝试使用 $count,它以前未定义为数组。 “$cash”分配应该是“$count”,反之亦然。

【讨论】:

  • 我的错 :) 现在已修复,但我仍然遇到同样的错误:/
  • 您必须将一个数组传递给您的 test() 函数。
  • 一开始我把它定义为一个空数组,但是测试没有通过:/
【解决方案2】:

尝试使用test(array('20' => 0)); 调用,您将不会收到错误消息。你可能用不是数组的东西来调用它?

【讨论】:

  • 我不确定您实际想要达到的目标。你能进一步解释一下吗?
  • 在您修改后的问题中,您不使用输入。请解释一下。
【解决方案3】:
$cash[$key] += 1;

应该是

$cash[$k] += 1;

我在这里包含了我用于测试的代码:-

<?php
function test($a){
  $cash = array(
    '20' => 0,
    '30' => 0,
    '40' => 0,
    '50' => 0,
    '60' => 0,
    '70' => 0,
    '80' => 0,
  );

  foreach($a as $k => $v) {
      if (array_key_exists("$k",$cash) && $v != NULL ) {
        $cash[$k] += 1;
      }
    }
  return  $cash;
}

// code that I have added to test the function from the post question
$testArray = array(
  '20' => 1,
  '30' => 2,
  '40' => 3,
  '50' => 4,
  '60' => 5,
  '70' => 6,
  '80' => 7,
);

$cash = test($testArray);

foreach($cash as $k => $v) {
  echo("\n$k : $v");
}

?>

结果:-

20 : 1
30 : 1
40 : 1
50 : 1
60 : 1
70 : 1
80 : 1

【讨论】:

    【解决方案4】:

    也许您可以尝试删除数组末尾的逗号。

    更改:'80' =&gt; 0,

    收件人:'80' =&gt; 0

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2014-11-17
    • 2016-05-17
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多