foreach循环中的array_unique - 注意:数组到字符串的转换

时间:2014-02-18 21:52:27

标签: php arrays

$universe = $_SESSION["company"];
$sql = "SELECT manufacturer FROM spaceships WHERE `$universe` = 1";
$companyListQuery = $db->prepare($sql);
$companyListQuery->execute();
$companyList = $companyListQuery->fetchAll();
$companyList = array_unique($companyList);
foreach($companyList as $row){
$selected = $row["manufacturer"];
echo '<tr>';
echo '<td class="table">'.$row["manufacturer"].'</td>';
}

所以这给了我一个通知,说有一个数组到字符串转换。但据我所知fetchAll()返回一个数组,所以我不确定为什么会这样说?感谢帮助。

2 个答案:

答案 0 :(得分:4)

array_unique比较(字符串)$ a ==(字符串)$ b。您的数组是一个数组数组,因此每个元素都转换为数组。有通知(array_unique适用于标量)

官方文档:注意:请注意,array_unique()不适用于多维数组。

http://php.net/array_unique此处

答案 1 :(得分:1)

Luis Masuelli的答案对于这个问题是正确的,但是如果您想要使用DISTINCT

,那么如果您想要唯一的行
$sql = "SELECT DISTINCT manufacturer FROM spaceships WHERE `$universe` = 1";

如果您不使用数据库,或者将来在PHP中执行此操作:

$companyList = array_map('unserialize', array_unique(array_map('serialize', $companyList)));