在处理数组时,使用array_keys()来获取数组的键是微不足道的。在处理对象时,我们还有其他函数,如get_object_vars()来处理这些。因此,如果我们有两个简单的变量,一个数组和一个对象:+--------------------+---------------------------+| Array | Object |+--------------------+---------------------------+| $array = array( | $object = new stdClass(); || 'foo' => 'bar', | || 'john' => 'doe', | $object->foo = 'bar'; || 'beep' => 'bop' | $object->john = 'doe'; || ); | $object->beep = 'bop'; |+--------------------+---------------------------+如果我们获取该函数并将其传递给数组,它将执行我们期望的操作,并给我们一个带有 、 和 的数组:array_keys()foojohnbeepReturn: array(3) { [0]=> string(3) "foo" [1]=> string(4) "john" [2]=> string(4) "beep"}当然,正如预期的那样,如果我们将对象传递给它,函数就会爆炸并且不知道该如何处理它(如果我们真的需要,我们可以转换甚至只是将其类型转换为数组):Return: NULLWARNING array_keys() expects parameter 1 to be array, object given但是,如果我们一次处理一个密钥,它似乎会变得更有趣一些。使用PHP的key()函数,我们可以提取我们想要的任何密钥。key($array); //returns: string(3) "foo"key($object); //returns: string(3) "foo"// If we move the internal pointerend( $array ); // key($array) returns: string(4) "beep"end( $object ); // key($object) returns: string(4) "beep"查看 key() 函数的文档,如果使用了 ,这不应该引发警告吗?我问是因为我很好奇,最近被否决了,并被告知不要在物体上使用。通常我使用其他方法,但在某些情况下使用没有警告(或错误) - 所以我决定查看,文档没有说任何关于允许,只是。我想类似的事情可以说数组指针的功能像.objectkey()key()objectarray &$arrayend()
1 回答
偶然的你
TA贡献1841条经验 获得超3个赞
来自: https://www.php.net/manual/en/language.types.array.php
如果将对象转换为数组,则结果是一个数组,其元素是该对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量在变量名称前面附加类名;受保护的变量在变量名称前面附加了“*”。这些预置值在两端都有空字节。这可能会导致一些意外行为
因此,在某些情况下,依赖在转换中未发生突变的键应被视为不可靠。
此外,根据给定的属性是否为 //,您可能无法获得预期的回报。public
protected
private
https://www.php.net/manual/en/function.get-object-vars.php#47075
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报
0/150
提交
取消