Php PDO将数组返回到更易访问的数组中
信息 这应该是一个相当简单的问题。在我的网站上,我的数据库中有一个post_分类,其结构如下Php PDO将数组返回到更易访问的数组中,php,arrays,multidimensional-array,pdo,Php,Arrays,Multidimensional Array,Pdo,信息 这应该是一个相当简单的问题。在我的网站上,我的数据库中有一个post_分类,其结构如下 ID | Name 1 | Sports 2 | Health 3 | Movies 4 | Music 现在,当我保存一篇博客文章时,我会在博客文章表中保存类别id,例如电影的1 在向我的用户打印博客文章时,我希望能够通过类似$categoris[$blog\u cat\u id']['name']
ID | Name
1 | Sports
2 | Health
3 | Movies
4 | Music
现在,当我保存一篇博客文章时,我会在博客文章表中保存类别id,例如电影的1
在向我的用户打印博客文章时,我希望能够通过类似$categoris[$blog\u cat\u id']['name']
下面是我如何获取上面使用的$categoris
的所有类别
function getCategorysArray(){
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
return $STH->fetchAll();
}
但这将以这种格式返回数组
Array
(
[0] => Array
(
[id] => 1
[0] => 1
[name] => Sports
[1] => Sports
)
[1] => Array
(
[id] => 2
[0] => 2
[name] => Health
[1] => Health
)
[2] => Array
(
[id] => 3
[0] => 3
[name] => Movies
[1] => Movies
)
[3] => Array
(
[id] => 4
[0] => 4
[name] => Music
[1] => Music
)
因此,我无法使用所需的方法获取类别名称($categorys[$blog\u cat\u id']['name']
)
问题
是否有一种方法可以以某种方式重新映射数组,以便将$array[1]['name']
=Sports
作为输出 试试这个:
function getCategorysArray(){
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$res = $STH->fetchAll(PDO::FETCH_ASSOC);
$categories = array();
foreach($res as $row){
$categories[$row['id']] = $row;
}
return $categories;
}
试试这个:
function getCategorysArray(){
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$res = $STH->fetchAll(PDO::FETCH_ASSOC);
$categories = array();
foreach($res as $row){
$categories[$row['id']] = $row;
}
return $categories;
}
因此,基本上,您希望数组由
id
的值索引
首先,可以通过调用fetchAll(PDO::FETCH\u ASSOC)
来简化数组。这意味着您将不再在返回的数组中有那些不必要的0
和1
索引
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$results = $STH->fetchAll(PDO::FETCH_ASSOC);
$ret = array();
foreach ($results as $row) {
$ret[$row['id']] = $row['name'];
}
return $ret;
那么最简单的解决方案就是在返回的数组上循环
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$results = $STH->fetchAll(PDO::FETCH_ASSOC);
$ret = array();
foreach ($results as $row) {
$ret[$row['id']] = $row['name'];
}
return $ret;
也许更好的是,我们可以删除fetchAll
调用,因为PDOStatement
是可遍历的
:
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$ret = array();
foreach ($STH as $row) {
$ret[$row['id']] = $row['name'];
}
return $ret;
因此,基本上,您希望数组由
id
的值索引
首先,可以通过调用fetchAll(PDO::FETCH\u ASSOC)
来简化数组。这意味着您将不再在返回的数组中有那些不必要的0
和1
索引
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$results = $STH->fetchAll(PDO::FETCH_ASSOC);
$ret = array();
foreach ($results as $row) {
$ret[$row['id']] = $row['name'];
}
return $ret;
那么最简单的解决方案就是在返回的数组上循环
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$results = $STH->fetchAll(PDO::FETCH_ASSOC);
$ret = array();
foreach ($results as $row) {
$ret[$row['id']] = $row['name'];
}
return $ret;
也许更好的是,我们可以删除fetchAll
调用,因为PDOStatement
是可遍历的
:
$STH = $this->database->prepare('SELECT * FROM project_categorys');
$STH->execute();
$ret = array();
foreach ($STH as $row) {
$ret[$row['id']] = $row['name'];
}
return $ret;
很好用,谢谢。最后一个问题,您所说的可遍历的
是什么意思?@Harry它的意思是PDOStatement
实现。这意味着您可以在其上运行foreach
。非常有效,谢谢。最后一个问题,您所说的可遍历的是什么意思?@Harry它的意思是PDOStatement
实现。这意味着您可以在其上运行foreach
。