2016-04-07 15 views
1

キャリア名とidをバインドして配列を作成する必要があります。そして、キャリア名を返すものをget_carrier_name_by_id(id)のように実行します。多次元配列でキーを取得

$carriers = array (
    "DPD" => array(1,2,3), 
    "DPD Pobranie" => array(4,5,6), 
    "Poczta-Polska" => array(7,8,9), 
    "Poczta-Polska pobranie" => array(10,11,12), 
    "Paczkomat" => array(13,14,15), 
    "Paczkomat pobranie" => array(16,17,18), 
    "Osobisty" => array(19,20,21), 
    "UPS" => array(22,23,24), 
    "UPS pobranie" => array(25,26,27) 
); 

これはデータを保持するための適切な方法ですか?

+0

をあなたが記述している何もマップや連想配列や辞書と呼ばれ、データを格納する合法的な方法です。また、PHPの中核となるデータ構造です。 – apokryfos

答えて

1

これを試してみてください:var_dump秒の

function get_carrier_name_by_id($id) 
{ 
    $carriers = array (
     "DPD" => array(1,2,3), 
     "DPD Pobranie" => array(4,5,6), 
     "Poczta-Polska" => array(7,8,9), 
     "Poczta-Polska pobranie" => array(10,11,12), 
     "Paczkomat" => array(13,14,15), 
     "Paczkomat pobranie" => array(16,17,18), 
     "Osobisty" => array(19,20,21), 
     "UPS" => array(22,23,24), 
     "UPS pobranie" => array(25,26,27) 
    ); 

    foreach($carriers as $name => $ids) 
     if(in_array($id, $ids)) 
      return $name; 

    return null; 
} 

echo '<pre>'; 
var_dump(get_carrier_name_by_id(122)); 
var_dump(get_carrier_name_by_id(12)); 

出力:

NULL 
string(22) "Poczta-Polska pobranie" 
1

array iteratorを見てみましょう。イテレータを使用したソリューション下記

外観:

function get_carrier_name_by_id($id) 
{ 
    $carriers = array(
     "DPD" => array(1, 2, 3), 
     "DPD Pobranie" => array(4, 5, 6), 
     "Poczta-Polska" => array(7, 8, 9), 
     "Poczta-Polska pobranie" => array(10, 11, 12), 
     "Paczkomat" => array(13, 14, 15), 
     "Paczkomat pobranie" => array(16, 17, 18), 
     "Osobisty" => array(19, 20, 21), 
     "UPS" => array(22, 23, 24), 
     "UPS pobranie" => array(25, 26, 27) 
    ); 

    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($carriers)); 

    foreach ($it as $key => $val) { 
     $key = $it->getSubIterator($it->getDepth() - 1)->key(); 
     if($val == $id){ 
      return $key; 
     } 
    } 
} 

echo get_carrier_name_by_id(3); //Output: DPD 
echo get_carrier_name_by_id(12); //Output: Poczta-Polska pobranie 
echo get_carrier_name_by_id(24); //Output: UPS 
1

あなたは簡単にarray_filter()in_array()key()を用いてキャリア名を取得することができます。

​​

意志出力:基本的に

DPD Pobranie 

、あなたをフィルタリングする必要があります$carriersと一致する配列$keyarray_filteranonymous functionarray_filterを使用すると、各配列要素を呼び出された関数に渡すことができ、関数がTrueと評価される値を返した場合、その要素はフィルターされた配列に返されます。あなたの場合、要素アイテムに要求されたキーがあるかどうかをチェックします。

次に、key()を使用して、フィルタリングされた配列の現在のポイント要素のキーを返します。配列は作成されただけなので、ポインタは配列の先頭にあります。

したい場合は、関数にこのスクリプトを適応させることができます。

function CarrierByID($carriers, $key) 
{ 
    return key(...); 
}