2013-01-18 8 views
1

이 배열과 이름 (예 : 'def')이 포함 된 배열이나 키는 어떻게 가져 옵니까?PHP : 중첩 값을 기반으로 배열을 얻는 방법

$all = array(
'0' => array(
     'name' => 'abc' 
     'option' => 1, 
    ), 
'1' => array(
     'name' => 'def' 
     'option' => 1, 
    ), 
'2' => array(
     'name' => 'ghi' 
     'option' => 0, 
    ), 
); 

'def'로 지정된 배열을 반환하는 가장 좋은 방법은 무엇입니까?

$single = array(); 
foreach ($all as $key => $value) { 
    if ($value['name'] == 'def') { 
    $single = $all[$key]; 
    } 
} 

를하거나 같이 보이도록 배열의 키를 사전 렌더링 :

$single = array(
    'name' => 'def' 
    'option' => 1, 
); 

나는 이런 식으로 뭔가를 할 수

$all = array(
'abc' => array(
     'name' => 'abc' 
     'option' => 1, 
    ), 
'def' => array(
     'name' => 'def' 
     'option' => 1, 
    ), 
'ghi' => array(
     'name' => 'ghi' 
     'option' => 0, 
    ), 
); 
$single = $all['def']; 

그러나이 있는지 궁금 해요 그 짧은 php 기능.

+1

는'foreach' 방법은 항상 이러한 경우에 최고였다 (이 변두리에 더 좋을 것이다하지만 당신은'if' 블록 내부의'break'을 포함하는 경우). 다른 방법으로도이 방법을 사용할 수는 있지만 더 장황하거나 덜 명확하거나 둘 다 될 것입니다. – Jon

답변

4

당신은 array_filter을 사용할 수

array_filter($array, function($var){ 
    return $var["name"] == "def"; 
}); 
+4

하지만 발견 한 값을 다시 풀어 줘야하기 때문에 임시적으로 전달하면'reset' 이후로'list ($ single) = array_filter (...)'와 같은 문구가 나온다. 그것은 내가 생각할 수있는 최선이지만 IMHO는 자신의 이익을 위해 너무 영리합니다. – Jon

+0

좋은 아이디어 주셔서 감사합니다! 가능한 한 단일 함수 호출에 가장 가깝기 때문에 이것을 답변으로 표시했습니다. 비록 내가 readablity와 약간의 복잡성 때문에 그것을 사용할 것이라는 확신이 들지는 않지만. –

관련 문제