하위 수준 중 하나의 값을 기반으로 다차원 배열의 첫 번째 수준 키를 반환하고 싶습니다.
예를 들어 '관리자 이메일'로 '@ google.com'을 제공하면 'Google'을 반환하고 싶습니다.
내 배열은 아래에 있습니다.
$array = array (
'Google' => array (
'Allowed Emails' => array ('@google.com','@gmail.com' ),
'Admin Emails' => '[email protected], [email protected]', // This really is supposed to be a String, not an array
'Company Name' => 'Alphabet',
'Memberships' => array ('websites', 'google' ),
),
'Facebook' => array (
'Allowed Emails' => array ('@facebook.com','@facebook.co.uk' ),
'Admin Emails' => '[email protected], [email protected]',
'Company Name' => 'Facebook Limited',
'Memberships' => array ('websites', 'facebook' ),
),
'Apple' => array (
'Allowed Emails' => array ('@apple.com','@icloud.com' ),
'Admin Emails' => '[email protected]',
'Company Name' => 'Apple Inc',
'Memberships' => array ('computers', 'apple' ),
),
'Dell2' => array (
'Allowed Emails' => array ('@dell.com' ),
'Admin Emails' => '[email protected]',
'Company Name' => 'Dell Computers',
'Memberships' => array ('computers', 'dell' ),
)
);
array_filter를 사용하여 먼 길을 얻었지만 아래는 내가 설정 한 변수 (이 경우 'google.com')가 배열의 첫 번째 변수 인 경우에만 작동합니다.
어떤 생각이라도 대단히 감사합니다.
function setitem ($item){ return $item['Allowed Emails'][0] === '@google.com' ;}
$filteredarray = array_filter($array, setitem);
$toplevelarray = array_keys($filteredarray);
echo $toplevelarray[0];
또한 변수를 전달하는 데 도움이 필요합니다 (이 경우 '@ google.com'은 하드 코딩되지 않으므로 'setitem'함수에 넣습니다. 어떤 이유로 든 정상으로 시도하면 오류가 발생합니다. 방법.
미리 감사드립니다.
특별히 할 일은 없습니다.
$result = [];
foreach ($array as $k => $v) {
if ( in_array('@google.com', $v['Allowed Emails']) )
$result[] = $k;
}
print_r($result);
키가 고유하다는 것을 이미 알고 있다면 for 배열 대신 문자열을 $result
사용 break
하고 루프를 중지하는 데 사용 하십시오.
array_filter
또는로 똑같이 할 수 array_reduce
있지만 속도가 느립니다.
변수를 함수에 전달하려면 한 번 더 마술은 없습니다. 매개 변수를 추가하세요.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다