PHP在php中访问数组中的键并检查它们是否存在然后执行某些操作

时间:2017-10-08 06:03:10

标签: php arrays

我真的很陌生。 我有这个json数据

[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语句有效,第二个没有。 如果我从第二个print语句中取出第二个if语句,它确实有效。

所以问题是为什么它在第二个if内不起作用。 或者有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

我认为这是因为array_key_exits()的语法。 试试这样。

    $cust_data = array(
        'phone_numbers' => array(
            array('type' => 'home', 'value' => 9876543210),
            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";
    }

答案 1 :(得分:0)

&lt; p&gt;为了使其更加灵活,我改变了对数据的看法。&lt; / p&gt; &LT;预&GT;&LT;代码&GT;&LT; PHP 使用error_reporting(E_ALL); ini_set(&#39; display_errors&#39;,1); $ cust_data = array(         &#39; PHONE_NUMBERS&#39; =&GT;阵列(                 数组(&#39;类型&#39; =&gt;&#39;主页&#39;,&#39;价值&#39; =&gt; 123456),                 数组(&#39;类型&#39; =&gt;&#39;工作&#39;,&#39;价值&#39; =&gt; 678910),                 数组(&#39;类型&#39; =&gt;&#39;移动&#39;,&#39;价值&#39; =&gt; 1029384675),                 数组(&#39;类型&#39; =&gt;&#39;其他&#39;,&#39;值&#39; =&gt; 18737540)         ) ); $ phoneTypes = [&#39; home&#39;,&#39; work&#39;,&#39; mobile&#39;,&#39;其他&#39;]; $ phoneList = array_column($ cust_data [&#39; phone_numbers&#39;],&#39; value&#39;,&#39; type&#39;); foreach($ phoneTypes as $ phoneType){     if(isset($ phoneList [$ phoneType])){         echo&#34; Phone&#34;。$ phoneType。&#34;:&#34;。$ phoneList [$ phoneType]。&#34;&lt; br /&gt;&#34 ;;     }     其他{         echo&#34; Phone&#34;。$ phoneType。&#34;:N / A&lt; br /&gt;&#34 ;;     } } &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;为了确保它不会错过空元素,我已将其更改为包含可能的数字类型列表($ phoneTypes),然后将初始数据转换为由类型索引的数组(array_column调用)。&lt; / p&gt; &lt; p&gt;然后,我浏览每种可能的电话类型并检查是否设置了特定的电话类型,并根据需要输出数字或N / A.&lt; / p&gt; &lt; p&gt;这样做的好处在于它不依赖于阵列中的位置,因此如果您删除了手机号码,这仍然有用,并为手机号码设置了N / A.&lt; / p&gt; ; &lt; p&gt;同样为了保持一致性 - 数字总是以相同的顺序排列,与您的源数据的组织方式无关。&lt; / p&gt;