Dre*_*ker 63 php object multidimensional-array
我有一个看起来像这样的对象(存储为$ videos)
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
Run Code Online (Sandbox Code Playgroud)
我想得到第一个元素的ID,而不必循环它.
如果它是一个数组,我会这样做:
$videos[0]['id']
Run Code Online (Sandbox Code Playgroud)
它曾经像这样工作:
$videos[0]->id
Run Code Online (Sandbox Code Playgroud)
但现在我在上面显示的行上得到一个错误"不能使用stdClass类型的对象作为数组...".可能是由于PHP升级.
那么如何在没有循环的情况下获得第一个ID呢?可能吗?
谢谢!
MrT*_*ick 70
可以使用
函数访问array()和stdClass对象
.current() key() next() prev() reset() end()
所以,如果您的对象看起来像
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
Run Code Online (Sandbox Code Playgroud)
那你就可以做;
$id = reset($obj)->id; //Gets the 'id' attr of the first entry in the object
Run Code Online (Sandbox Code Playgroud)
如果你出于某种原因需要密钥,你可以这样做;
reset($obj); //Ensure that we're at the first element
$key = key($obj);
Run Code Online (Sandbox Code Playgroud)
希望对你有用.:-)在PHP 5.4上没有错误,即使在超严格模式下也是如此
Cla*_*lva 66
更新2019年
继续使用OOPS的最佳实践,@ MrTrick的答案必须标记为正确,尽管我的答案提供了一个黑客解决方案,但这不是最好的方法.
简单地使用{}迭代它
例:
$videos{0}->id
Run Code Online (Sandbox Code Playgroud)
这样,您的对象不会被破坏,您可以轻松地遍历对象.
对于PHP 5.6及更高版本,请使用此方法
$videos{0}['id']
Run Code Online (Sandbox Code Playgroud)
小智 15
正确:
$videos= (Array)$videos;
$video = $videos[0];
Run Code Online (Sandbox Code Playgroud)
小智 13
更容易:
$firstProp = current( (Array)$object );
Run Code Online (Sandbox Code Playgroud)
$videos->{0}->id 为我工作.
由于$ videos和{0}都是对象,因此我们必须使用 $videos->{0}->id.大括号大约需要0,因为省略大括号会产生语法错误:意外的'0',期望标识符或变量或'{'或'$'.
我正在使用PHP 5.4.3.
在我的情况下,既没有$videos{0}->id和$videos{0}['id']工作,并显示错误:
不能使用stdClass类型的对象作为数组.
你可以在对象上循环然后在第一个循环中中断...就像这样
foreach($obj as $prop) {
$first_prop = $prop;
break; // exits the foreach loop
}
Run Code Online (Sandbox Code Playgroud)