2013-10-22 41 views
1

我試着根據我在數組中搜索的值獲取鍵索引。我有folloeing陣列:如何獲得數組的父鍵

[0] => Array 
       (
        [n1:ProductWithTermPricingOptions] => Array 
         (
          [n1:ProductName] => Customer will provide modem 
          [n1:PricingOptions] => Array 
           (
            [n1:Priority] => 600 
            [n1:PricingOptionCode] => LCTL_SA_MDM_NONE_LCTL:NONE:MODEM:IN:CON:SA:na:na:NONE:NONE:-1:-1:NONE:LCTL:NONE:0:na:NONE:A:PO:na:0:NULL:NULL:NULL 
            [n1:ProductMonthlyCharge] => $0.00 
            [n1:PromoMonthlyCharge] => $0.00 
            [n1:ProductActivationCharge] => $0.00 
            [n1:ProductActivationChargeDescription] => Array 
             (
             ) 

            [n1:ContractLength] => Array 
             (
             ) 


             (
             ) 


             (
             ) 

            [n1:ProductDisclaimer] => Array 
             (
             ) 


           ) 

         ) 

我需要獲得其中值「客戶提供調制解調器」居住在此情況下,它應該返回數字0爲關鍵中的關鍵數字。在其他情況下,它將返回不同的位置。我曾嘗試以下,但這裏的值,而不是[0]它返回鍵:

public static function searchArrayKeybyValue(array $array, $search) { 
    foreach (new RecursiveIteratorIterator (new RecursiveArrayIterator ($array)) as $key => $value) { 
     if ($search === $value) 
      return $key; 
    } 
    return "N/A"; 
} 

任何幫助表示讚賞。我的目標是將此選項放在數組的最後位置。 謝謝。

回答

2
function array_finder($array, $search, $parent_key = false) 
{ 
    foreach ($array as $local_key => $value) { 
     $key = ($parent_key === false) ? $local_key : $parent_key; 

     if (is_array($value) and ($subsearch = array_finder($value, $search, $key)) !== false) { 
     return $subsearch; 
     } elseif ($value == $search) { 
     return $key; 
     } 
    } 
    return false; 
} 
echo array_finder($array, 'Customer will provide modem'); 
+0

完美的解決方案。它工作得很好。謝謝。 – user1960170

+0

@ user1960170不客氣 – Edakos

0

您正在返回內部鍵,而不是最外面的鍵。對外部數組使用正常的foreach,對內容使用遞歸迭代器。

foreach ($array as $key => $subarray) { 
    foreach (new RecursiveIterator($subarray) as $value) { 
     if ($value === $search) { 
      return $key; 
     } 
    } 
}