我可以用两列创建一个关联数组吗?我希望 A 列作为键,B 列作为值。
-------------
| id | name |
-------------
| 1 | sky |
-------------
| 2 | space |
我想要一个能够产生如下结果的函数:
$ary=array('1'=>'sky','2'=>'space', ... );
有关于这个问题的php函数吗?
我正在使用 php、mysql 和 codeigniter。
$ary = array();
while ($row = $stmt->fetch_assoc()) {
$ary[$row['id']] = $row['name'];
}
即使您使用的是 codeigniter,您也不需要使用 codeigniter 的库。如果您愿意实现 PDO 实现,您可以在本机 PHP 中执行类似的操作:
$stmt = $db->query("select id, name from mytable");
$results = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
与其他一些实现相比,这种方式的开销会更少,但这取决于您是否想使用 PDO。
由于您使用的是 Codeigniter,请使用其结果集辅助方法,然后调用
array_column()
将两列转换为平面关联数组。
var_export(
array_column(
$this->query($sql)->result(),
'name',
'id'
)
);
如果您只是使用 PHP 的本机 mysqli:
程序风格:
$result = mysqli_query($conn, $sql);
var_export(
array_column(
mysqli_fetch_all($result, MYSQLI_ASSOC),
'name',
'id'
)
);
面向对象风格:
$result = $conn->query($sql);
var_export(
array_column(
$conn->fetch_all($result, MYSQLI_ASSOC),
'name',
'id'
)
);
可以立即迭代结果集对象:(Demo)
$result = [];
foreach ($mysqli->query($sql) as $row) {
$result[$row['id']] = $row['name'];
}
var_export($result);
您甚至可以在无体循环中使用数组解构。
$result = [];
foreach ($mysqli->query($sql) as ['id' => $id, 'name' => $result[$id]]);
var_export($result);
foreach($rows as $key => $value){
$arr[$key] = $value;
}