PHP PDO FetchAll - 数组格式

时间:2016-09-12 08:24:20

标签: php arrays pdo

我有一些简单的代码:

:ul1 = 0;

$sql = "SELECT word FROM tbl WHERE 1 = 1 AND catid > :ul1 ORDER BY RAND() LIMIT 3";

$stmt1 = $pdo->prepare($sql1);
$stmt1->bindParam(':ul1', $ul1);
$stmt1->execute();
$row1 = $stmt1->fetchAll();

var_dump($row1);

输出:

array(3) {
  [0]=>
  array(2) {
    ["word"]=>
    string(8) "arrochar"
    [0]=>
    string(8) "arrochar"
  }
  [1]=>
  array(2) {
    ["word"]=>
    string(7) "cabinet"
    [0]=>
    string(7) "cabinet"
  }
  [2]=>
  array(2) {
    ["word"]=>
    string(10) "doghearted"
    [0]=>
    string(10) "doghearted"
  }
}

我可以通过以下方式访问数组元素:

$test = $row1[2][0];

我想知道是否有任何方法可以获得更简单的数组输出 - 例如每个数组元素似乎包含两次相同的东西。

不重要 - 我仍然可以做我需要做的事情,我只是好奇。

1 个答案:

答案 0 :(得分:1)

虽然您要求PDO::FETCH_ASSOC不变(通过调用fetchAll(PDO::FETCH_ASSOC),您只会获得单个值),但还有更智能的提取模式 - PDO::FETCH_COLUMN

$ul1 = 0;
$sql = "SELECT word FROM tbl WHERE catid > ? ORDER BY RAND() LIMIT 3";
$stmt = $pdo->prepare($sql);
$stmt->execute([$ul1]);
$data = $stmt->fetchAll(PDO::FETCH_COLUMN);

var_dump($data);

这样你就可以得到一个简单的一维数组,你可以用最自然的方式解决这个问题:

$test = $data[2];

或用

迭代
foreach ($data as $word)
{
    echo "$word</br>\n";
}