サブレベルの1つの値に基づいて多次元配列の第1レベルのキーを返したいとします。特定の値が多次元配列のサブレベルに含まれている場合、最上位配列のキーを返します
たとえば、「管理用メール」として「@ 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];
はまた、私は「SetItem関数」関数に「@ google.com」は、この場合、変数を渡すいくつかの助けを(必要があります。何らかの理由で、私はエラーを取得した場合私が試してみて、それを通常の方法を行う
感謝を事前に特定の
これは素晴らしいことです。ありがとうCasimir。 –
私はすべての '許可された電子メール'を1つの新しい配列(本質的に以下のものが印刷されるもの)にマージしたいのですが、これを行う簡単な方法はありますか? '$($ array = $ v){ print_r($ v ['Allowed Eメール']); } ' –
これは私の2番目の質問を解決するように思われる - これはエレガントな解決策ですか?ありがとう '$ result = []; foreach($ array = $ v){ $ result [] = $ v ['Allowed Eメール']; } $ result = array_reduce($ result、 'array_merge'、array()); print_r($ result); ' –