在没有循环的情况下访问对象数组

时间:2015-12-22 16:19:14

标签: php arrays

我有一个SQL查询,它返回一个名为$results的对象数组。 SQL查询有一个' LIMIT 1',因此数组中永远不会有多个对象实例(无需循环)。该数组如下:

  

array(1){[0] => object(stdClass)#5875(1){[" meta_value"] =>   string(3)" yes" }}

meta_value对象可以是“是”或“不是”。我想访问meta_value'直接所以我可以在一个条件下使用它的输出,我努力找到一种方法来做到这一点。我的代码如下,但这不是有效的PHP

if ($results->meta_value == 'yes') {
  //do something nice
}

3 个答案:

答案 0 :(得分:3)

因为$results对象数组,您应该选择索引为0的第一个元素,然后选择某个属性:

if ($results[0]->meta_value == 'yes') {}

答案 1 :(得分:0)

您也可以使用array_shift

/* @var stdClass $result */
$result = array_shift($results);

if ($result->meta_value == 'yes') {
    //do something nice
}

供参考,请参阅http://php.net/manual/en/function.array-shift.php

答案 2 :(得分:0)

imo,获取PHP array第一行值的最简单,最可靠和最安全的方法是使用current — Return the current element in an array函数。

if (current($results)->meta_value === 'yes') {
  //do something nice
}

为什么?

问题是PHP array不是内存中基于零的线性单元格列表。这真是一个有序的hash map  用其他语言。

可以将 any string 用作 key index。如果在向数组添加条目时不使用密钥,则它使用从零开始的数字索引。

重点是键不必是连续的整数。它们可以是单词(字符串)。 ie 数组中可能没有零索引

那么,如果我们不知道PHP array的索引,如何访问keys的第一个元素?

PHP数组迭代器

每个array都有一个iterator与之关联。如果数组有元素,则元素的迭代器points或未定义的空数组。

创建数组时,迭代器始终设置为指向第一个条目

访问Array Iterator的常用函数:

  • current - 返回数组中internal pointer指向的元素

  • key - 从数组中获取当前密钥

  • next - 推进数组的内部数组指针
  • reset - 将数组的内部指针设置为第一个元素

    注意:

  • 如果没有指向有效元素,
  • current将返回false,否则会返回该值。

摘要

通过使用current函数访问数组,您肯定会获得indexkey实际上的条目值。