2014-02-18 3 views
0
$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()은 배열을 반환하므로 왜 이런 말을하는 지 모르겠습니다. 도움을 주시면 감사하겠습니다.foreach 루프의 array_unique -주의 사항 : 배열에서 문자열로 변환

+0

경고는 실제로 어떤 라인에서 오는 것입니까? 문자열 컨텍스트에서 배열을 사용할 수있는 장소가 두 곳 이상 있습니다. –

+0

줄 40, 그래서 어디 $ companyList = array_unique ($ companyList); – user3271847

+0

오류가 정확합니다. array_unique는 각 요소에 대해 문자열 비교를 수행하므로 문자열 배열 (또는 문자열로 변환 할 수있는 요소)이 필요하지만 배열 배열을 제공합니다. 그것은 문자열로 배열을 변환하려고합니다 – rwilson04

답변

1

루이스 Masuelli의 대답은 질문에 대한 정확하지만,이에 따라 당신이 원하는 경우, 고유 한 행 DISTINCT를 사용

$sql = "SELECT DISTINCT manufacturer FROM spaceships WHERE `$universe` = 1"; 

또는 미래의

이 경우 PHP에서 그것을 할 데이터베이스를 사용하고 있지 않습니다.

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

고맙습니다. 나는 "SELF DISTINCT"에 대해 알지 못했고, 지금 나는 그 존재를 알고있어서 기쁩니다. 다시 한번 감사드립니다. – user3271847

+0

자체가 아닙니다. 그것의 SEELCT –

+0

아, 오타 .. 그 미안 해요 – user3271847

4

array_unique는 (string) $ a == (string) $ b를 비교합니다. 배열은 배열의 배열이므로 각 요소는 배열로 변환됩니다. 주의 사항이 있습니다 (array_unique는 스칼라에 유용합니다)

공식 문서 : 참고 : array_unique()는 다차원 배열에서 작동하지 않습니다. 여기

http://php.net/array_unique