2011-04-27 5 views
1

을 유지하기 위해 다차원 연관 배열을 array_push. 그래서 " 'Book1을', 'BOOK2'을 검색하는 사람이 그들은 배열을 다시 얻을 것이다 경우 :PHP는 내가 배열이 구조

$results = array('Book1' => array('http://www.google.com', '45'), 'Book2' => array('http://www.yahoo.com', '46',))

을이 :

$bookArray = array() 
$bookDetailsarray = array(); 

$needles = array('book1' , 'book2'); 

    foreach ($needles as $needle) { 

    foreach ($array as $key => $value) 
     { 

      if ($key == $needle) 
       { 
       array_push($BookArray, $key); 
       array_push($bookDetailsarray, $value); 
       array_push($bookArray, $bookDetailsarray);               
       }    
     } 
    } 


    } 

이 작동하지만 foreach는 각각의 반복에 그것은 $ 값으로 $ bookDetailsaray를 추가 유지가 반환 그래서 :.. 등등

Book1 => [0]'Book1details' 
Book2 => [0]'Book1details' [1]'Book2details' 
Book3 => [0]'Book1details' [1]'Book2details' [2] 'Book3details' 

,369

array_push($BookArray, $key=>$value); 

을하지만, 분명히 가능하지 먹으 렴 : 1,363,210

나는 할 수 있어야합니다. 아이디어가 있으십니까? 비록 내가 필요한 배열 기능이라 할지라도.

답변

2

약간 더 효율적인 방법은 기본 PHP 함수를 사용하기보다는 반복 검색을 할 수 :

$searchArray = array('Book1' => array('http://www.google.com', '45'), 
         'Book2' => array('http://www.yahoo.com', '46'), 
         'Book3' => array('http://www.excite.com', '47') 
        ); 

$needles = array('Book1','Book3'); 

$searchResults = array_intersect_key($searchArray,array_flip($needles)); 

var_dump($searchResults); 

을하지만 대소 문자를 구분 당신이 원하는 경우

편집

이므로주의 대/소문자를 구분하지 않고 검색하는 경우 대신 사용자 지정 비교를 사용하여 키 대/소문자를 무시하고 array_intersect_ukey()을 사용할 수 있습니다.

function key_compare_func($key1, $key2) { 
    $key1 = strtoupper($key1); 
    $key2 = strtoupper($key2); 

    if ($key1 == $key2) 
     return 0; 
    else if ($key1) > $key2) 
     return 1; 
    else 
     return -1; 
} 

$searchResults = array_intersect_ukey($searchArray, array_flip($needles), 'key_compare_func'); 

편집 2

많은 간단한 너무 사용자 정의 키 비교를 할 수 strcasecmp() 사용.

function key_compare_func($key1, $key2) { 
    return strcasecmp($key1,$key2); 
} 
+0

와우. 그것은 깔끔하다! 감사 – BobFlemming

0

사용하는 대신이 논리 (하지만 난 당신이 마지막 줄이 원하는 것을 100 % 아니에요?)

$BookArray[]=$key; 
$bookDetailsarray[]=$value; 
$bookArray[]=$bookDetailsarray;