2017-10-08 37 views
0

私はこれで本当に新しいです。 私は、このJSONデータPHP phpで配列のキーにアクセスし、それらが存在するかどうかを確認してから何かをしてください

[phone_numbers] => Array 
    (
     [0] => stdClass Object 
      (
       [type] => home 
       [value] => 123456 
      ) 

     [1] => stdClass Object 
      (
       [type] => work 
       [value] => 678910 
      ) 

     [2] => stdClass Object 
      (
       [type] => mobile 
       [value] => 1029384675 
      ) 

     [3] => stdClass Object 
      (
       [type] => other 
       [value] => 18737540 
      ) 

    ) 

を持っている私は、キーが存在するかどうかを確認し、それらが存在しない場合は、それらを印刷するにチェックしたいです。存在しない場合は "N/A"を印刷してください

私はこのコードを持っています。それは優雅なやり方ではないかもしれません。

if (array_key_exists(0,['phone_numbers'])) 
{ 
Print "Phone " . $cust_data ['phone_numbers'][0]['type'] . ": " . 
$cust_data['phone_numbers'][0]['value'] . "<br>"; 
    } 
else 
    { 
    print "Phone N/A"; 
} 

if (array_key_exists(1,['phone_numbers'])) 
{ 
    Print "Phone " . $cust_data ['phone_numbers'][1]['type'] . ": " . 
$cust_data['phone_numbers'][1]['value'] . "<br>"; 
} 
else 
    { 
print "Phone N/A"; 
} 

最初のprint文は機能し、2番目のprint文は機能しません。 2番目のprint文を2番目のif文から取り除くと正しく動作します。

したがって、質問は2番目のifの内部では機能しません。 これを行うには良い方法がありますか?

+0

コードはここで動作します - https://3v4l.org/JNJ22 array_key_exists(0、['phone_numbers']) 'と' array_key_exists(1、['phone_numbers'])の '['phone_numbers']'は実際に '$ cust_data ['phone_numbers']'であると仮定しています。 – Sean

+0

ありがとうSean PHPのバージョンが違いますか? Xampp/OSウィンドウのPHP 7.1.8 はいキー/値があります ありがとう –

答えて

0

これをより柔軟にするために、データの表示方法を変更しました。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$cust_data = array(
     'phone_numbers' => array(
       array('type' => 'home', 'value' => 123456), 
       array('type' => 'work', 'value' => 678910), 
       array('type' => 'mobile', 'value' => 1029384675), 
       array('type' => 'other', 'value' => 18737540) 
     ) 
); 
$phoneTypes = ['home', 'work', 'mobile', 'other']; 
$phoneList = array_column($cust_data['phone_numbers'], 'value', 'type'); 
foreach ($phoneTypes as $phoneType) { 
    if (isset($phoneList[ $phoneType ])) { 
     echo "Phone ".$phoneType.": ".$phoneList[ $phoneType ]."<br />"; 
    } 
    else { 
     echo "Phone ".$phoneType.": N/A<br />"; 
    } 
} 

それはちょうど私が($ phoneTypesを)期待する番号の可能なタイプのリストを持って、それを変更した、空の要素を逃し、その後する初期データを変換しないことを確実にするために、型によってインデックスされた配列(array_column呼び出し)。

次に、可能な電話の種類のそれぞれを調べて、その特定のものが設定されているかどうかを確認し、必要に応じて番号またはN/Aを出力します。

この利点は、配列内の位置に依存しないため、携帯電話番号を削除した場合でもこれが機能し、携帯電話番号にN/Aを付けることです。

また、一貫性のために、数字は常に同じ順序で並べられますが、ソースデータがどのように構成されているかは関係ありません。

+0

多くのありがとうナイジェル。 これは完全に機能します! –

0

array_key_exits()という構文のためだと思います。 このようにしてください。

$cust_data = array(
     'phone_numbers' => array(
      array('type' => 'home', 'value' =>), 
      array('type' => 'work', 'value' => 78734464546), 
      array('type' => 'mobile', 'value' => 1234567890), 
      array('type' => 'other', 'value' => 9876343630) 
     ) 
    ); 
    if (array_key_exists (0, $cust_data['phone_numbers'])){ 
     Print "Phone " . $cust_data ['phone_numbers'][0]['type'] . ": " . 
      $cust_data['phone_numbers'][0]['value'] . "<br>"; 
    } 
    else { 
     print "Phone N/A"; 
    } 
    if (array_key_exists(1, $cust_data['phone_numbers'])){ 
     Print "Phone " . $cust_data ['phone_numbers'][1]['type'] . ": " . 
      $cust_data['phone_numbers'][1]['value'] . "<br>"; 
    } else { 
     print "Phone N/A"; 
    } 
関連する問題