为foreach()提供的无效参数

为foreach()提供的无效参数

我经常遇到这样的情况:处理数据,这些数据既可以是数组,也可以是空变量,并提供一些foreach用这些数据。

$values = get_values();foreach ($values as $value){
  ...}

当您用非数组的数据填充外汇时,您会得到一个警告:

警告:为[.]中的foreach()提供的无效参数

假设不可能重构get_values()函数要始终返回数组(向后兼容性,而不是可用的源代码,无论其他原因如何),我想知道哪种方法是避免这些警告的最干净和最有效的方法:

  • 铸造

    $values

    数组
  • 初始化

    $values

    数组
  • 包扎

    foreach

    带着

    if

  • 其他(请建议)


翻翻过去那场雪
浏览 1269回答 4
4回答

喵喵时光机

就我个人而言,我发现这是最干净的-不确定这是否是最有效的,头脑!if (is_array($values) || is_object($values)){     foreach ($values as $value)     {         ...     }}我选择的原因是,当您开始没有什么东西的时候,它不会分配空数组。

郎朗坤

这个怎么样?很多清洁剂和所有的单线。foreach ((array) $items as $item) {  // ...  }

largeQ

请不要依赖铸造作为解决方案。尽管其他人认为这是防止错误的有效选项,但它可能会导致另一个错误。注意:如果您期望返回特定形式的数组,则可能会失败。这需要更多的检查。例如:将布尔值转换为数组(array)bool威尔不结果是一个空数组,但是一个包含布尔值作为int的元素的数组:[0=>0]或[0=>1].我写了一个快速测试来提出这个问题。..(这里有一个备份测试如果第一个测试url失败了。)包括对以下方面的测试:null, false, true..class..array和undefined.在使用之前,一定要测试您的输入。建议:快速类型检查: $array = is_array($var) or is_object($var) ? $var : [] ;类型暗示阵列在使用foreach和指定返回类型包扎使用try{}catch(){}砌块在产品发布前设计适当的代码/测试要根据适当的格式测试数组,可以使用array_key_exists在特定的钥匙上,或者测试数组的深度(当它是一个!).始终将助手方法解压缩到全局命名空间中,以减少重复代码。
打开App,查看更多内容
随时随地看视频慕课网APP