PHP:一维无意插入的多维数组

时间:2018-10-27 14:18:10

标签: php mysql arrays

我正在使用此语句在数据库的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无法解决此问题。但是这里到底是什么问题?

有没有人见过这样的东西以及如何解决这个问题的想法?

谢谢。

2 个答案:

答案 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');