【问题标题】:Merging multiple objects合并多个对象
【发布时间】:2013-08-01 02:01:10
【问题描述】:

我有一个通过框架 (WolfCMS) 进行的 MYSQL 查询。

$sql_query = 'SELECT DISTINCT country FROM ' . $tableName . ' ORDER BY country ASC';
$countries = Record::query($sql_query, array()); //execute query

但是返回的是这样的对象数组

Array ( [0] => stdClass Object ( 
        [country] => Canada ) [1] => stdClass Object ( 
        [country] => France ) )

我想知道 php 是否有办法合并所有对象以使数组尽可能简单

Array ( [0] => Canada  [1]  => France )

我知道,一旦我获得数据并按照我需要的方式创建自定义数组,我总是可以使用 foreach 循环解析数组,但我想知道是否有办法直接将数据从数据库。

我只想要一个简单的数组,将其用作文本字段上自动完成功能的参数。

* 编辑 *

我找到了更好的方法。我只需要避免使用 Record 类执行查询。

方法如下

//create sql statement
$sql_query = 'SELECT DISTINCT country' . 
            ' FROM ' . Record::tableNameFromClassName(__CLASS__) . 
            ' ORDER BY country ASC';
$stmt = Record::getConnection()->prepare($sql_query);
$stmt->execute(array());
return $stmt->fetchAll(Record::FETCH_COLUMN);

【问题讨论】:

  • 你使用什么框架,有些框架自带获取数组而不是对象的内置功能。为什么数据返回的方式在您的情况下很重要?
  • 你能发布你用来执行和检索查询的代码吗?
  • 您可以扩展框架/api并添加一些方便的方法。
  • 更新了答案。 @SergeiBeregov 我知道array_merge,但我希望合并未知数量的数组。我知道我可以使用 for 循环,但考虑到这是一个简单的查询,我只是认为会有一个更简单的解决方案。但我不认为我不能使用这个框架。谢谢大家。

标签: php mysql arrays object


【解决方案1】:

你试过array_map吗?

$countries = array_map(function ($item) { return $item->country; }, $result );

【讨论】:

  • 这是一个非常优雅的解决方案。比 for 循环干净得多。谢谢
【解决方案2】:

您无法仅通过 WolfCMS 中的查询来实现此目的。你应该试试:

$finalArr = array();
for($i=0; $i<sizeof($result);$i++) // $result being your query result
    array_push($finalArr,$result[$i]->country);

print_r($finalArr);

【讨论】:

  • 据我了解,OP 知道此解决方案,他正在寻找一种“更清洁”/更简单的方法来做到这一点。
  • 使用内置 MySQL API 无法获得这样的一维数组。你可以做的是创建一个函数/方法,它接受一个记录集并返回一个包含每行第一个字段的数组。
  • @YotamOmer 我认为你是对的。这是框架的限制。谢谢!
猜你喜欢
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 2020-01-18
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多