2013-10-12 3 views
2

해당 항목에 대한 항목 및 설명이 포함 된 배열이 있습니다. 부분 문자열에 대한 모든 값을 검색하고 값이 발견 된 키를 반환하는 스크립트를 설정하려고합니다. 다음은 배열의 예입니다.키의 부분 값에 대한 다차원 배열 검색

Array 
(
[10023] => Array 
    (
     [0] => 10023 
     [idTag] => 10023 
     [1] => Bolt 4in full thread (252668) 
     [desc] => Bolt 4in full thread (252668) 
     [2] => PL9811 
     [serialNo] => PL9811 
     [3] => 252-668 
     [modelNo] => 252-668 
    ) 
[10024] => Array 
    (
     [0] => 10024 
     [idTag] => 10024 
     [1] => Bolt 6in full thread (252-670) 
     [desc] => Bolt 6in full thread (252-670) 
     [2] => PL9823 
     [serialNo] => PL9823 
     [3] => 
     [modelNo] => 
    ) 

[91143] => Array 
    (
     [0] => 91143 
     [idTag] => 91143 
     [1] => PEG 2.5mm SS (0711P) 
     [desc] => PEG 2.5mm SS (0711P) 
     [2] => PX3501 
     [serialNo] => PX3501 
     [3] => 0711P 
     [modelNo] => 0711P 
    ) 

) 

그래서 검색한다면 '252-'내가이 값에 대한 모든 키 (idtag, 내림차순, serialNo 및 modelNo)를 확인하는 스크립트가 필요합니다. 그것은 현재, 그것은 작동하지 않는

function searchFor($haystack, $needle) 
{ 
    foreach($haystack as $key => $value) 
    { 
     if ($value === $needle) 
     return $key; 
    } 
    return false; 
} 

: 다음 키 10023 및 10024.

내가 현재 사용하고 스크립트는 나에게 돌아갑니다. 그러나 그때는 참으로 당신이 할 수있는 키 10023.

을 반환하지

if ($value['modelNo'] === $needle) 

을 변경하고 (내 검색 225-668 대신 225-이었다 예) 정확히 일치하는 경우에만 모델 번호를 검색했다 참조 -이 스크립트의 탄생과 같은 배열 데이터에 불일치가 있기 때문에 값을 포함 할 수있는 모든 가능한 키를 검색하고 부모 키를받을 수 있어야합니다.

+1

'PDO :: FETCH_ASSOC'을 fetch_style로 사용하면 배열이 축소됩니다. –

답변

2

기존 foreach에서 foreach()를 다시 사용하고 strpos()! == false를 사용하여 $ needle을 확인합니다.

foreach($haystack as $key => $array) { 
    foreach($array as $value) { 
     if(strpos($value, $needle) !== false) { 
     return $key; 
     } 
    } 
} 
관련 문제