我正在使用此语句在数据库的1个表的1列中搜索不同的条目:
SELECT DISTINCT column FROM table WHERE column entry LIKE '%keyword%'
这很好,因为转储mysqli_query会向我显示提供的特定关键字的预期条目数。 然后,我尝试将查询结果写入一维数组(该数组在代码中的其他位置声明):
while($row = mysqli_fetch_row($query)) {
$array[] = $row;
}
因此,我期望这样的简单数字一维数组:
Array(
[0] => value 1
[1] => value 2
...
)
当使用print_r($ array)检查结果时,我得到一个像这样的数组:
Array(
[0] => Array([0] => value1)
[1] => Array([0] => value2)
...
)
我不知道这个奇怪的结构从哪里来,因为这不是我代码中唯一的数组。我一步一步检查了特定的代码块,得出的结论是问题出在数组的创建之内。使用mysqli_fetch_assoc无法解决此问题。但是这里到底是什么问题?
有没有人见过这样的东西以及如何解决这个问题的想法?
谢谢。
答案 0 :(得分:3)
mysqli_fetch_row()
返回SQL中列的数组,因此当您将其添加到数组中时...
$array[] = $row;
这将创建每行的一个数组-这是数组的数组。相反,如果您将列值添加到数组...
$array[] = $row[0];
这应该使结果如您所愿。
答案 1 :(得分:1)
mysqli_fetch_row
将结果行作为枚举数组。除 Nigel Ren 的方法外,您还可以使用mysqli_fetch_assoc()
。它将作为关联数组获取结果行。它将以列名作为键,而不是像0、1 ..这样的数字。这样更清晰。
现在,您有两个选择来获取特定列值的一维数组。
使用列名作为键,从结果行访问列值:
while($row = mysqli_fetch_assoc($result)) {
$array[] = $row['columnname'];
}
OR
您可以首先准备二维数组(因为您可能有多个列);然后使用array_column()
函数以一维数组的形式获取特定的列值。
while($row = mysqli_fetch_assoc($result)) {
$array[] = $row;
}
// Extract values for a columnname key
$columnname_values = array_column($array, 'columnname');
OR
奈杰尔·伦在comments中提出的另一种替代方法是使用mysqli_fetch_all()
函数。
$array = mysqli_fetch_all($result,MYSQLI_ASSOC);
// Extract values for a columnname key
$columnname_values = array_column($array, 'columnname');