返回一维数组而不是多维数组


Return one dimensional array instead of multi

好的,所以当从数据库中提取时,我只希望年份作为一维数组而不是多维数组返回:

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或更高版本上的一样高