Search code examples
phparraysundefined-index

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


"foreach" loop results in an 'Undefined Index' error when I manipulate an array.

The array is generated from MS Excel and works fine with PHP array functions. When I use "foreach" loop to extract data, I get the 'Undefined Index' error but when I dump the value of the index, I get desired results.

The code extract is as below:

    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'];
        }
    }

How can this be solved?

Or else, is there a better way to get three arrays containing dates of birth for various genders? The sample data array is as below.

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 [▶]

Solution

  • You need to check if the key is existing in the array or not using 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'] : '';
    }