【问题标题】:Even if array for foreach is empty, run it即使 foreach 的数组为空,也运行它
【发布时间】:2014-11-11 10:55:57
【问题描述】:

我遇到了一个小问题。好吧,我通过声明变量 $all_meta_for_user = get_user_meta($user_id, 'meta_key', false) 从 wordpress 数据库中获取一些 user_meta 数据,这些数据存储为数组。然后,我想检查是否存在某些特定数据,如果存在,则执行某些操作,否则执行其他操作。我在 stackoverflow 的某个地方有一个提示,我可以通过这种方式实现它:

foreach($all_meta_for_user as $key=>$val) :
        if (array_key_exists ('some_key', $val) && array_key_exists ('some_other', $val)) { do something } else {do something else } 
endforeach;

只要数据库中存在关联的“meta_key”(这很明显:)),效果就很好。但是,如果不是呢?然后,很明显,foreach 是错误的并且它不会运行。 基本上,即使数组为空,我也想在else 之后显示内容。我怎样才能改变我的代码,以实现这一目标?我想我可以让它工作,如果我首先检查 if 数组是否为空,如果没有 - 用 foreach 做代码,如果是 - 做我的其他。但问题是,在我的 else 中有很多代码,所以我想避免重复它。

所以,简单来说,问题是,如何以一种不错的方式制作它,这不会使我的代码翻倍 :) 谢谢!

PS 我真的找不到合适的主题名称。如果有人知道如何命名它,请发表评论,以便我更改它!谢谢!

【问题讨论】:

  • 你不能把你的else 的内容放在一个函数中,然后在你的 else 或者你的 foreach 之前调用这个函数,如果数组是空的?
  • 正如我在下面的答案中所说 - 不,由于我缺乏对过于复杂的 php 代码的理解,我不能。 :(

标签: php arrays wordpress foreach


【解决方案1】:

您可以创建“else”函数,并将其与 if/else 理念结合起来。这样你就不会有任何重复,只是函数调用:

function elseFunction() {
    //do something else
}

if (!empty($all_meta_for_user)) {
    foreach($all_meta_for_user as $key=>$val){
        if (array_key_exists ('some_key', $val) && array_key_exists ('some_other',$val)){ 
            // do something  
        }
        else { 
            elseFunction(); // this is changed
        }
    }
}
else {
    elseFunction();
}

【讨论】:

  • 但是如果我在该函数中有变量,我需要将它们作为函数参数传递,对吧?而且有很多变量...:
  • 是的,实际上想将其添加到我的原始答案中,但在最后一刻将其删除。 :) 如果您有很多变量,也许您可​​以使用单个关联数组作为参数:elseFunction($options)
  • 这行不通。在那个“else”里面有一些类的引用,与这些类相关的变量,以及一些其他讨厌的东西,我没有写,我太低级了,无法理解和正确写,此外,这是一种支付页面,它必须非常安全,我可以把它搞砸。看来我需要加倍代码..
  • 我不同意,您当前在 else 语句下拥有的任何内容都可以进入单个函数。在安全方面没有任何改变。如果不确切地了解您在说什么,我无法为您提供更多帮助。
  • 我设法用你的 sn-p 做到了这一点,所以不用深入,你的回答很有帮助,而且它有效。非常感谢!
猜你喜欢
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
相关资源
最近更新 更多