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

时间:2013-12-06 18:02:22

标签: php arrays

好的,所以我只想在从数据库中提取数据时将其作为一维数组返回而不是多数:

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();

}

这个函数基本上只返回{​​{1}} 在另一个脚本中,我正在做:

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)

这可能吗?因为我正在通过我的选择形式帮助函数,它采用所有选项的一维数组并循环通过它们。但它无法循环遍历多列表,因为它试图回显索引,不幸的是这是一个数组..而不是字符串。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您可以编辑All方法,创建一个新方法,例如AllOneDimentional(不是一个好名字!),或者从All返回并操作它的数据:

foreach($years as $year)
    $onedimyears[]=$year['year'];

答案 1 :(得分:0)

在过去,当我尝试过这个时,我已经使用了这个功能

function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;

}

尽管你在PHP 5.3或更高版本上假设它是非常有效的

答案 2 :(得分:0)

只是一个例子,需要错误检查/检查有效列等...

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 oncereturn early重新构建此内容。