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

Converting an unknown to an array in PHP

我有一个查询,returns 一个对象或一个基于项目数的数组。如果返回零个或一个项目,则它 returns 将项目作为对象。如果有两个或更多项目,那么它 returns 一个对象数组。

我想对查询结果执行 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)即可使用。

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

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

<?php

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

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

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

I'm wanting to do a foreach on the query result, but that is throwing an error if it is an object that is returned, rather than an array.

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

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 */