在PHP中将未知数转换为数组

时间:2015-06-08 20:45:44

标签: php arrays object associative-array

我有一个查询,它根据项目数返回一个对象或一个数组。如果返回零个或一个项目,则它将该项目作为对象返回。如果有两个或更多项,则返回一个对象数组。

我想对查询结果执行foreach,但如果它是返回的对象而不是数组,则会抛出错误。所以我创建了一个将对象转换为数组的函数。

function to_array($unknown) {
  if (count($unknown) === 0) {
    $array=array($unknown);
  } elseif (!is_array($unknown)) {
    $array = array();
    $array[0] = $unknown;
  } else {
    $array = $unknown;
  }
  return $array;
}

只需拨打$query_array = to_array($query_return)即可使用。

这是最好的方法吗?有没有更好的办法?这可能造成任何问题吗?

2 个答案:

答案 0 :(得分:2)

您的方式看起来不错,但我建议您检查$unknown是否可以缓存并相应地进行转换。当然,如果你不止一次这样做,那就把它放在一个函数中。

<?php

$unknown = ...; // call to API

if (!is_array($unknown) && !($unknown instanceof \Traversable)) {
    $unknown = array($unknown);
}

foreach ($unknown as $item) {
    // ... do things
}

答案 1 :(得分:1)

  

我想要对查询结果做一个foreach,但那就是抛出   如果它是返回的对象而不是数组,则会出错。

您的数据来源似乎有些不清楚或不清洁。我们谈论的是查询,对象和数组。谁知道还有什么可能,您的数据源发展得越多。因此,我会首先检查数据类型并处理所有的可能性。

gettype功能为您提供了一个很好的起点。然后你可以使用开关来处理所有可能性,甚至是未来的PHP修改,如下所示。

对于数组转换的对象,我会使用get_object_vars函数而不是简单的类型转换,因为我不清楚该类型转换器究竟会做什么。但get_object_vars函数已有详细记录。

$type = gettype ( $unknown );
switch ($type) {
  case "array":
    $array = $unknown;
    break;
  case "object":
    $array = get_object_vars ( $unknown );
    break;
  case "boolean":
  case "integer":
  case "double": 
  case "string":
  case "resource":
  case "NULL":
  case "unknown type":
  default: throw new Exception("Unknown data type");
}

/* Do something here with $array */