2013-12-12 1 views
0

위치가 다중 배열이고 두 개의 배열 또는 다수와 일치하는 경우 과 일치하는 하나의 위치를 ​​필터링하려고합니다. 하나의 배열 만 제공하십시오PHP에서 간단한 방법으로 멀티 배열의 요소를 필터링하는 방법

$country = 'United States'; 
$city = 'Miami'; 

$locations = 
    Array ( 
    "count" => 6, 
    "query" => "Miami", 
    "locations" => Array ( 
    "0" => Array ( 
    "id" => 4621 , 
    "name" => "Miami, FL, United States - 661 hotels" , 
    "country_name" => "United States ", 
    "country_code" => "US" , 
    "state_code" => "FL" 
    ), 
    "1" => Array (
    "id" => 4633 , 
    "name" => "Miami, OK, United States - 86 hotels" , 
    "country_name" =>" United States", 
    "country_code" => "US" , 
    "state_code" => "OK" 
     ), 
    "2" => Array (
    "id" => 21670 , 
    "name" =>" South Miami, FL, United States - 30 hotels", 
    "country_name" => "United States" , 
    "country_code" => "US" , 
    "state_code" => "FL" 
     ) 
    ) 
    ); 
+0

결과가 1 개의 새 배열로 이동해야하거나 결과를 $ locations 배열에 포함 시키겠다는 의미입니까? 그리고 "쿼리"필드 또는 "이름"필드에서 $ 도시 값을 검색하고 있습니까? – nowhere

+0

이 하나의 배열을 내게주세요 – user1080247

+0

"0"=> 배열 ( "id"=> 4621, "name"=> "Miami, FL, United States - 661 hotels", "country_name"=> "United States ", "country_code "=>"US ", "state_code "=>"FL " – user1080247

답변

0
$newArray= array(); 
foreach ($locations['locations'] as $key => $value) { 
    if (strpos($value['name'],$city) !== false) { 
     if(strpos($value['country_name'],$country) !== false){ 
      $newArray = $value; 
      break; 
     } 
    } 
} 
print_r($newArray); 

이런 식으로 내가 검색 한 값을 가지고있는 배열을 포함하는 새로운 배열을 반환하고 있습니다. 이게 니가 원하는거야?

편집 : 결과가 원하는지 확인하십시오.

+0

아니요 .. 많은 배열이 일치하면 하나만 줘야합니다. – user1080247

+0

어느 것입니까? 올바른 결과를 얻은 첫 번째 것? 이 경우 array_push ($ newArray, $ value)를 대체하십시오. $ newArray = $ value;와 함께 단절; – nowhere

0
$locationArray = $locations['locations']; 
foreach($locationArray as $location) { 
    if ((strpos($location['country_name'], $country) !== false) && (strpos($location['name'], $country) !== false)) { 
     return $location; 
    } 
} 
0

항목이 사용자 조건과 일치하는지 확인하는 함수를 정의하십시오. array_filter() 또는 루프에서이 함수를 사용할 수 있습니다.

$locations = array( 
    "count" => 6, 
    "query" => "Miami", 
    "locations" => array( 
    "0" => array( 
     "id" => 4621 , 
     "name" => "Miami, FL, United States - 661 hotels" , 
     "country_name" => "United States ", 
     "country_code" => "US" , 
     "state_code" => "FL" 
    ), 
    // ... 
) 
); 

// define the filter function 
$country = 'United States'; 
$city = 'Miami'; 
$validate = function($item) use ($country, $city) { 
    return (
    trim($item['country_name']) == $country && 
    0 === strpos($item['name'], $city.',') 
); 
}; 

// filter 
var_dump(
    array_filter($locations['locations'], $validate) 
); 

// find first 
$location = NULL; 
foreach ($locations['locations'] as $location) { 
    if ($validate($location)) { 
    $result = $location; 
    break; 
    } 
} 
var_dump($result); 
관련 문제