2011-12-31 3 views
1

는 나는이 같은 데이터베이스 테이블에서있어 변수가 :배열에 여러 값을 확인하는 방법은 무엇입니까?

while($r = mysql_fetch_array($query) //The query is just: SELECT * FROM stuff_table WHERE userid='$userid' 
{ 
$stuff = $r['stuff']; 
} 

물건 변수는 다음과 같습니다 : "자동차, 책, 컴퓨터, 식품"나는 그것을 배열했다 :

//I used: 
$array_of_stuff = explode(",", $stuff); //This gave me an array. 
는 지금은 다음과 같이 그 값을 확인하고 싶었 :

if(in_array("cars", $array_of_stuff) && in_array("books", $array_of_stuff)) 
{ 

//This line is the problem, I want it to check to see if it has "cars" and "books" in the array but this code is not working for that like it should. Instead of checking and finding both, it just goes on to the next elseif. 

echo "Cars and Books"; 
} elseif(in_array("cars")) { 
// 
echo "Only cars"; 
} elseif(in_array("books")) { 
echo "Only books"; 
} else { 
echo "Other stuff..."; 
} 

나는이에서 얻을 출력은 다음과 같습니다 대신 "자동차와 책"의 "오직 자동차".

그렇다면 if/elseif 문을 계속하기 전에 코드가 2 개 이상의 값에 대해 배열을 검사하도록하려면 어떻게해야합니까? in_array 함수로 가능합니까?

바르 덤프 :

array(4) { [0]=> string(4) "cars" [1]=> string(6) " books" [2]=> string(10) " computers" [3]=> string(6) " foods" } 
+0

코드가 정상적으로 보입니다. 무슨 문제인가? –

+0

'var_dump ($ array_of_stuff)'의 출력을 주시겠습니까? – Lars

+0

@ MДΓΓ БДLL 배열에 2 개의 값을 확인하고 싶지만 그렇지 않습니다. 왜 그런지는 모르겠지만 배열에는 배열에서 찾은 두 개의 값이 있다는 것을 이해하지 못합니다. – randomphp

답변

1

$ array_of_stuff가 실제로 설명한대로 explode(",","cars, books, computers, foods")으로 설정된 경우 배열의 앞에 다른 값 앞에 공백이 있습니다 차보다. in_array() 함수는 대상 요소의 하위 문자열과 일치하지 않으므로 "books"는 배열의 "books"와 일치하지 않습니다.

이와 같은 문자열을 구문 분석해야하는 경우 배열 형식으로 올바르게 구문 분석 할 수 있도록 형식의 정의가 정확한지 확인해야합니다. ","가 유일한 구분 기호이고 해당 시퀀스가 ​​항상 구분 기호를 나타낼 경우 (예 : 이스케이프 또는 인용 부호가없는 경우) explode(",",...)explode(", ",...)으로 변경할 수 있습니다. 저장하는 데이터 인 경우 자체 형식을 고안해서는 안됩니다. 대신 (PHP 만 이해할 수 있음) 또는 json_encode() (이식성이 높음)을 사용하여 원시 유형을 문자열로 변환하고 해당 디코드 기능을 사용하여 디코드하십시오.

그 외에도 SQL 테이블 행의 필드에 배열을 저장하는 것은 종종 스키마가 잘못되었다는 표시 일 때가 많지만 항상 그런 것은 아닙니다.

-1

예, 당신은 in_array()에 2 개 이상의 바늘을 확인 배열로 첫 번째 인수에 전달할 수 있습니다

$searchStuff = array('cars','books'); 
if(in_array($searchStuff, $array_of_stuff)){ 
    // both found 
} 

php.net를 참조, 예 # 3

+0

해답을 주셔서 감사합니다. 그러나 저는 여전히 동일한 출력을 얻고 있습니다. 대신에 "자동차 만"두 값을 찾는 대신에. – randomphp

+1

"books"등의 선행 공백을 자르십시오. –

+3

in_array()의 첫 번째 인수로 배열을 전달하면 해당 배열이 일치합니다 ('cars ','books ')' $ array_of_stuff'). 여러 개의 바늘을 검색하지 않습니다. 'foreach ($ needle as $ needle) {...}'에 넣는 것이 가장 좋습니다. – Brendan

관련 문제