При работе с массивами довольно просто использовать 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()
и передадим ей массив, он сделает то, что мы все ожидаем, и даст нам массив с foo
, john
и beep
:
Return: array(3) {
[0]=> string(3) "foo"
[1]=> string(4) "john"
[2]=> string(4) "beep"
}
И, конечно, как и ожидалось, если мы вместо этого передадим ему объект , функция взорвется и не будет знать, что с ним делать (если нам это действительно нужно, мы можем преобразовать или даже просто типизировать его). к массиву):
Return: NULL
WARNING 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 pointer
end( $array ); // key($array) returns: string(4) "beep"
end( $object ); // key($object) returns: string(4) "beep"
Глядя на документацию для функции key()
, разве это не выдает предупреждение, если используется object
? Я спрашиваю, потому что мне любопытно, и мне недавно отказали и сказали не использовать key()
на объектах. Обычно я использую другие методы, но в некоторых случаях использовал key()
без предупреждений (или ошибок) - поэтому я решил посмотреть, и нигде в документации ничего не говорится о разрешении object
, просто array &$array
. Я полагаю, что подобное можно сказать и о функциях указателя массива, таких как end()
.