我有一个数组,它从mysql查询中获取数据。
$mysql = "select distinct name from software";
$result = mysqli_query($conn, $mysql);
while($myrow = mysqli_fetch_assoc($result)) {
$array[] = $myrow;
}
我想做的是有这样的数据输出:
item1, item2, item3
最后,我想做的是能够将该信息存储在一个变量中,用于mysql查询
$array = item1, item2, item3
select * from table where item != ($array)
然而,我无法正确输出数据,
如果我使用print_r
,则会显示数据,并且阵列良好。
如果我使用array_key()
,我只得到数字,我如何才能得到名字?
print_r
输出:
( [0] => Array ( [name] => Skype for Business Basic 2016 - en-us ) [1] => Array ( [name] => Microsoft Visual C++ 2008 Redistributable - x64 9. ) [2] => Array ( [name] => Microsoft Office 365 Business - en-us ) [3] => Array ( [name] => Microsoft Silverlight ) [4] => Array ( [name] => NVIDIA 3D Vision Driver 341.92 ) [5] => Array ( [name] => NVIDIA Graphics Driver 341.92 ) [6] => Array ( [name] => NVIDIA Update 10.4.0 ) [7] => Array ( [name] => NVIDIA HD Audio Driver 1.3.30.1 ) [8] => Array ( [name] => FortiClient ) )
执行此操作时:
while($myrow = mysqli_fetch_assoc($result)) {
$array[] = $myrow;
}
对于所获取的每一行,都要将整个行数组追加到$array
中。您可以将其更改为
while($myrow = mysqli_fetch_assoc($result)) {
$array[] = $myrow['name'];
}
只附加名称字符串。然后,您将得到一个字符串数组,而不是数组数组,implode
将为您提供所需的结果。
您可以使用array_column(PHP 5.5+)来获得您想要的值:
print_r(array_column($array, 'name'));
您是否只使用第二个查询的输出,而不使用其他输出?如果是,为什么要将其存储在数组中?相反,你可以做一些类似的事情
$namelist = "";
$mysql = "select distinct name from software";
$result = mysqli_query($conn, $mysql);
while($myrow = mysqli_fetch_assoc($result)) {
$namelist .= mysqli_real_escape_string($conn, $myrow['name']).",";
}
$namelist = substr($namelist, 0, -1);
然后它直接准备好进行第二次查询,这将需要一个NOT IN:
select * from table where item NOT IN ($array)
请注意,在mysqli_real_escape_string
上使用准备好的语句是更好的做法,但在这种情况下应该可以,因为$namelist
已经直接来自您的数据库。