gpt4 book ai didi

php - 如何检查 PHP 中的数组性?

转载 作者:IT王子 更新时间:2023-10-29 00:18:10 27 4
gpt4 key购买 nike

我能想到的最好的是

function is_array_alike($array) {
return is_array($array) || (is_object($array) && $array instanceof ArrayAccess && $array instanceof Traversable && $array instanceof Serializable && $array instanceof Countable);
}

呃。还有更漂亮的东西吗?

编辑:is_object 的测试似乎没有必要。我已经在 instanceof PHP 手册中添加了一个章节。

最佳答案

好吧,既然你在帖子中确实使用了“漂亮”这个词,那么为了提高可读性,我只是一个关于外观变化的快速建议:

function is_array_or_alike($var) {
return is_array($var) ||
($var instanceof ArrayAccess &&
$var instanceof Traversable &&
$var instanceof Serializable &&
$var instanceof Countable);
}

变化说明:

  1. 函数名称更改:"is_array_alike"-> "is_array_or_alike"只是为了表明正在测试数组性和相似性。

  2. Param/arg 名称更改:$array -> $var 因为“$array”已经是某种预设参数是数组类型。

  3. 可读性和符合 Drupal 编码标准的堆栈 &&'ed 条件:最多 80 个字符的行。由于您是 Drupal 核心维护者之一,我想我假设此功能可能会进入 Drupal,因此您可能会在提交之前完成此操作。

  4. 您是正确的,is_object() 是不必要的。在 Java 中,这是必要的,因为如果第一个操作数不是对象, instanceof 会抛出编译时错误,但我刚才在 PHP 中检查过,没有错误,只是 bool 的结果(错误)。

我支持 paulmatthews86 的建议,即您提供一个用例。如果我们不知道标准,就很难提供建议。例如,从 duck-typing 范例的角度借用一点,instanceof 测试会很有用,但不一定是强制性的,甚至不一定是完整的。如果您对 $var 可以做什么以及它在某些上下文中的行为更感兴趣,那么您可以使用反射来检查是否存在需要稍后调用的方法,或者您可以测试它在传递给数组函数时是否按预期运行。例如它是否与 array_udiff_assocarray_chunk 等一起“工作”。如果这些行为对您的用例更重要,那么这些测试可能会取代 instanceof类型测试,当然会有很多重叠。

希望这对您有所帮助。如果您决定发布它,很想知道您最终做出了什么决定。

关于php - 如何检查 PHP 中的数组性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12346479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com