当键存在时,如何解决“未定义索引”错误?

How do I solve 'Undefined index' error when the key exists?

提问人:Tim Kariuki 提问时间:5/10/2019 最后编辑:Tim Kariuki 更新时间:5/10/2019 访问量:951

问:

当作数组时,“foreach”循环会导致“未定义索引”错误。

该数组是从 MS Excel 生成的,适用于 PHP 数组函数。当我使用“foreach”循环提取数据时,我收到“未定义索引”错误,但是当我转储索引的值时,我得到了所需的结果。

代码提取如下:

    foreach ($membership_data as $data){
        //dd($data["Gender"]);
        if($data["Gender"]=='Male') {
            $males_dates_of_birth[] = $data['DateofBirth'];
        } elseif ($data["Gender"]=='Female'){
            $females_dates_of_birth[] = $data['DateofBirth'];
        } else {
            $erroneous_gender_dates_of_birth[] = $data['DateofBirth'];
        }
    }

如何解决这个问题?

或者,有没有更好的方法来获取包含不同性别出生日期的三个数组?示例数据数组如下所示。

array:100 [▼
  6 => array:15 [▼
    "MemberNumber" => "48490"
    "Surname" => "Wuckert"
    "FirstName" => "Clement"
    "OtherNames" => "Dr. Monique Murazik II"
    "DateofBirth" => "1968-08-4"
    "DateEmployed" => "1988-08-04"
    "DateJoinedScheme" => "1968-08-4"
    "Gender" => "Female"
    "DocumentType" => "National ID"
    "DocumentNumber" => "a370523307a"
    "KRAPIN" => "a459831176c"
    "NSSFNumber" => "a526026924k"
    "TelephoneNumber" => "722136702"
    "EmailAddress" => "[email protected]"
    "TelephoneNumberCountry" => "Kenya"
  ]
  7 => array:15 [▶]
  8 => array:15 [▶]
  9 => array:15 [▶]
  10 => array:15 [▶]
  11 => array:14 [▶]
php 数组 undefined-index

评论

0赞 Rakesh Jakhar 5/10/2019
什么是输入数组?
0赞 Saad Suri 5/10/2019
你能发布你的阵列吗
0赞 matiit 5/10/2019
只需先检查密钥是否存在即可。对于某些$data迭代,它显然不存在。

答:

0赞 Rakesh Jakhar 5/10/2019 #1

您需要检查密钥是否存在于数组中或使用array_key_exists

if(array_key_exists('Gender', $data) && $data["Gender"]=='Male') {
    $males_dates_of_birth[] = array_key_exists('DateofBirth', $data)  ? $data['DateofBirth'] : '';
} elseif (array_key_exists('Gender', $data) && $data["Gender"]=='Female'){
    $females_dates_of_birth[] = array_key_exists('DateofBirth', $data)  ? $data['DateofBirth'] : '';
} else {
    $erroneous_gender_dates_of_birth[] = array_key_exists('DateofBirth', $data)  ? $data['DateofBirth'] : '';
}