好的,所以当从数据库中提取时,我只希望年份作为一维数组而不是多维数组返回:
public function getYears($make = null, $model = null) {
// select table
$this->select(array('DISTINCT year'));
$this->table($this->table);
// build where clause
if( $make !== null && $model !== null ) {
$this->where('make', '=', $make);
$this->and_where('model', '=', $model);
} elseif( $make !== null && $model === null ) {
$this->where('make', '=', $make);
} elseif( $make === null && $model !== null ) {
$this->where('model', '=', $model);
}
return $this->all();
}
这个函数基本上只返回SELECT DISTINCT year FROM vehicle;
在另一个脚本中,我正在做:
$years = $vehicle->getYears();
然而,它是这样返回的:
array (size=1)
0 =>
array (size=1)
'year' => string '2014' (length=4)
1 =>
array (size=1)
'year' => string '2013' (length=4)
我希望它能原样返回:
array (size=1)
0 => string '2014' (length=4)
1 => string '2013' (length=4)
这可能吗?因为我把它放在我的选择表单助手函数中,该函数接受所有选项的一维数组,并在其中循环。但它不能循环通过多列表,因为它试图回显索引,不幸的是,索引是一个数组。。不是字符串。
谢谢你的帮助。
仅举一个例子,需要错误检查/检查有效列等…
public function all($column=null) {
$this->execute();
if($column === null) {
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
while($row = $this->stmt->fetch(PDO::FETCH_ASSOC)) {
$result[] = $row[$column];
}
return $result;
}
或者创建另一个方法all_single($column)
或其他什么,然后使用它。无需循环遍历all()
的结果。你唯一需要的是如果你只得到一列。
此外,您还可以根据您喜欢return once
还是return early
来重新构造它,如图所示。
您可以编辑All方法,创建一个新方法,如AllOneDimentional(不是一个好名字!),也可以获取从All返回的数据并对其进行操作:
foreach($years as $year)
$onedimyears[]=$year['year'];
过去,当我尝试这样做时,我使用了这个函数
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
它的效率与假设您在php5.3或更高版本上的一样高