【问题标题】:PHP How to check if array has not key and valuePHP如何检查数组是否没有键和值
【发布时间】:2019-06-26 01:39:53
【问题描述】:

我正在使用某人开发的一个自定义 CMS,但在检查数组结果时遇到问题。

该函数通过传递userids数组返回一个用户名数组。

示例代码

$all_users = "1,5,9,10,25,40"; // getting from database

$user_ids = explode(',', $all_users);
$usernames  = get_userids_to_usernames($user_ids); //this returns usernames array by passing uesrids array

如果数据库在列中没有用户,则该函数将返回奇怪的空/空数组,如下所示。

var_dump($usernames);

array(1) { [""]=> NULL }

print_r($usernames);

(
    [] => 
)

现在的问题是,我想检查数组是否为空或有返回值,但我已经尝试了所有is_nullemptycount($usernames) > 0,但这些都不起作用。

谁能帮我有条件地检查数组是否有值或为空,如上面的空结果。

【问题讨论】:

  • 这不是空的。你能测试一下是否有一个项目,键为“”,值为空吗? 3-4 个条件(is_array、count、isset、==(=)),一个 if。
  • 使用is_null()检查值是否为空
  • @splash58 是的,我已经测试了所有这些,我得到了相同的false 结果。知道如何检查它以便可以对这样的结果使用条件语句吗?
  • @niklaz is_null 工作不正常。
  • "1,5,9,10,25,40"; // getting from database 为什么数据库会返回 CSV ID?

标签: php arrays


【解决方案1】:

这里有一个解决方法

if (array_key_exists('', $a) && $a[''] === null) {
    unset($a['']);
}

然后检查空虚

【讨论】:

  • 这看起来是建议的解决方案中最安全的。使用定制的 CMS,您不能期望它的行为总是相同的,这个答案考虑到了这一点。
【解决方案2】:

您可以使用in_array 来检查数组是否有空值,并使用array_key_exists 来检查键。

in_array("", $array)
array_key_exists("", $array)

http://php.net/manual/en/function.in-array.php

http://php.net/manual/fr/function.array-key-exists.php

【讨论】:

  • 这似乎有效,但也可以用其他答案进行测试。只是为了找到最佳解决方案。
  • @CodeLover 以及如果 in_array 搜索值但 '' 是关键,它是如何工作的?
  • 通过制作php cast类型检查数组是否有元素值为空字符串?这是以一堆错误结束的最佳方式
  • @splash58 这里最大的问题是通过检查emptycount 在这里不起作用,因为它返回false 所以我相信@Dialex 解决方案有效(我已经测试过)和@ line88 解决方案也有效。现在需要看看哪个更好。
  • @splash58 @Code Lover 您也可以使用array_key_exists 来检查空键。我只是忘了你在找那个。你也许可以像这样组合使用它们:if(in_array("", $array) || array_key_exists("", $array))
【解决方案3】:

遍历数组,检查键或值是否为空或为空

$newarray = [];
foreach($array as $key=>$value)
{
    if(is_null($value) || trim($value) == '' || is_null($value) || trim($key) == ''){
    continue; //skip the item
  }
        $newarray[$key] = $value;
}

【讨论】:

    【解决方案4】:

    如果你想用空,试试数组过滤器

    if (empty(array_filter($arr))) {
        //Do something
    }
    

    数组过滤器会自动为你移除错误值,如果你需要更多的灵活性,你可以包含一个回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多