2014-05-13 67 views
1

我創建了一個具有兩個變量$ state和$ sectors的腳本。如果國家在該部門,我想顯示該部門。下面的示例使用「亞利桑那」作爲國家,它應該輸出部門「西南」,但我不認爲我與陣列正常工作:如果存在子數組中的值,則顯示父鍵

<?php 

    $state = 'Arizona'; 

    $sectors = array(
       "Southeast" => array(
         'name' => 'Southeast', 
         'states' => array('Alabama', 'Georgia', 'Florida', 'South Carolina', 'North Carolina', 'Louisiana', 'Tennessee', 'Kentucky', 'West Virginia', 'Mississippi') 
       ), 
        "Southwest" => array(
          'name' => 'Southwest', 
          'states' => array('California', 'Arizona', 'New Mexico', 'Utah') 
        ) 
    ); 

     function has_recursive($sectors, $state) 
     { 
      foreach ($state as $key => $value) { 
       if (!isset($sectors[$key])) { 
        return false; 
      } 
      if (is_array($sectors[$key]) && false === has_recursive($sectors[$key], $value)) { 
       return false; 
      } 
     } 
     return true; 
    } 

    if (has_recursive($sectors, $state) == true){ 
    // false or true 
     echo $sector['name']; // Displays Southwest 
    } 

請幫助。

+0

你肯定是說' '狀態'=>陣列( '加州', '亞利桑那', '新墨西哥', '爵士')' ? (注意'array(...)') – bwoebi

+0

是否更好做'東南部'=>數組('Alabama','Georgia','Florida','South Carolina','North Carolina','Louisiana ','田納西州','肯塔基州','西弗吉尼亞州','密西西比州')'我如何檢索$部門 – Rizzo

+0

@Rizzo是 – bwoebi

回答

0

試試這個:

function get_sector($sector_array, $state_name) { 

    foreach ($sector_array as $sec) 
     if (in_array($state_name, $sec)) 
      return $sec['name']; 

    return false; 
} 

鑑於$state$sectors在你的問題中定義......

echo get_sector($sectors, $state); // prints "Southwest" 

有關評論UPDATE:

有幾種不同的做法「未找到」返回值。什麼工作最適合你的應用程序是你的,但這裏有幾個例子:

return false; 

//This would be used like this: 
if (!$sect = get_sector($sectors, $state)) 
    echo "A custom error message" 
else 
    echo "Sector = " . $sect; 

,或者你可以返回一個特定的字符串:

return "Sector not found."; 
// Return a standard error message 

或定製的字符串:

​​
+0

如果爲空則爲空? – Rizzo

+0

@Rizzo如果沒有找到假,這是我原來的想法。如果不匹配,我已更新函數返回「找不到扇區」。 –

+0

@Rizzo我再次更新關於返回值的更多信息:) –

0

該功能應該可以工作。在代碼中使用的

function getSector($stateName, $sectorList) { 
    foreach($sectorList as $sector) { 
     if(in_array($stateName, $sector['states']) { 
     return $sector['name']; 
     } 
    } 
// If state is not found 
return 'NOT FOUND'; 
} 

例子是:

echo getSector($state, $sectors); 
+0

在這之前給出的這個或[其他答案](http://stackoverflow.com/a/23639882/)幾乎沒有任何區別。功能是100%相同的,當返回略有不同時。 –

相關問題