【问题标题】:how to extract a column from mysql result set?如何从mysql结果集中提取一列?
【发布时间】:2010-05-07 20:23:59
【问题描述】:

从 mysql 结果集中提取列的最佳方法是什么?我的结果集是这样的:

[0] = ('id'=>1, 'name'=>a),
[1] = ('id'=>2, 'name'=>b),
[2] = ('id'=>3, 'name'=>c)

如何从中提取“名称”列作为数组?我可以使用 for 循环来做到这一点。但是想知道是否有更好的可重用解决方案?

【问题讨论】:

  • 你需要id列吗?为什么不告诉查询只获取名称列?
  • @karim79:这是简化的虚拟结果集。
  • @understack - 明白了,很抱歉这个愚蠢的评论。
  • @understack 但这并不能回答@karim 的问题。为什么要获取比需要更多的列?如果您只想处理名称,那么只需获取名称即可。另外,你为什么需要提取名称列呢?为什么不能只使用整个结果集?
  • @Gordon:我想要的只是一个来自已预取结果集中的列作为数组。我不确定为什么它会引起混淆,因为它在问题本身中明确提到。

标签: php mysql multidimensional-array


【解决方案1】:

您可以使用array_map 来执行此操作。

function getName($elem) {
  return $elem['name'];
}
$names = array_map('getName', $input);

// PHP 5.3.0 or higher allows anonymous functions
$names = array_map(function($e) { return $e['name']; }, $input);

【讨论】:

  • +1,这个 or array_walk 将是可行的方法,但array_map 更容易使用。
  • array_map 也不会破坏原始数组... Walk 将... php.net/manual/en/function.array-walk.phparray_walk 的文档页面
【解决方案2】:
$rows = array(
 array('id'=>1, 'name'=>'a'), 
 array('id'=>2, 'name'=>'b'),
 array('id'=>3, 'name'=>'c')
);


$names = array();    
foreach ($rows as $row) {
 $names[] = $row['name'];
}

使用简单的循环将比使用类似 array_map 的东西执行得更快(这会产生更多的开销)。速度差异可高达 100%。

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多