Search code examples
phplinkedin-apijson

Parsing json_decode() multiple results


Quite a newbie in this area so forgive me if my terminology is incorrect. I have been working with the Linked in API and have manages to get a JSON format returned. Like so:

 "skills": {
"_total": 5,
"values": [
  {
    "id": 1,
    "skill": {"name": "British Sign Language"}
  },
  {
    "id": 7,
    "skill": {"name": "Drupal"}
  },
  {
    "id": 8,
    "skill": {"name": "WordPress"}
  },
  {
    "id": 9,
    "skill": {"name": "iOS development"}
  },
  {
    "id": 10,
    "skill": {"name": "Magento"}
  }
]
}

I need to add each one of these into an array and then add them to a database. I tried decoding the JSON like so:

$linkedInResults = json_decode($JSON_response, true);

and then tried to add them to an array like this:

$arr_skills = array();
foreach ($linkedInResults->skills as $addSkill) {
    $arr_skills[] = $addSkill;
}
var_dump($arr_skills);

However I just get this error:

Warning: Invalid argument supplied for foreach()

and the output of the var dump is:

array(0) { } 

EDIT: using: $linkedInResults['skills'] gives:

 array(2) {
[0] => int(13)[1] => array(13) {
    [0] => array(2) {
        ["id"] => int(1)["skill"] => array(1) {
            ["name"] => string(21)
            "British Sign Language"
        }
    }[1] => array(2) {
        ["id"] => int(7)["skill"] => array(1) {
            ["name"] => string(6)
            "Drupal"
        }
    }[2] => array(2) {
        ["id"] => int(8)["skill"] => array(1) {
            ["name"] => string(9)
            "WordPress"
        }
    }[3] => array(2) {
        ["id"] => int(9)["skill"] => array(1) {
            ["name"] => string(15)
            "iOS development"
        }
    }[4] => array(2) {
        ["id"] => int(10)["skill"] => array(1) {
            ["name"] => string(7)
            "Magento"
        }
    }[5] => array(2) {
        ["id"] => int(11)["skill"] => array(1) {
            ["name"] => string(10)
            "Web Design"
        }
    }[6] => array(2) {
        ["id"] => int(12)["skill"] => array(1) {
            ["name"] => string(8)
            "Blogging"
        }
    }[7] => array(2) {
        ["id"] => int(13)["skill"] => array(1) {
            ["name"] => string(30)
            "iPhone Application Development"
        }
    }[8] => array(2) {
        ["id"] => int(14)["skill"] => array(1) {
            ["name"] => string(6)
            "HTML 5"
        }
    }[9] => array(2) {
        ["id"] => int(15)["skill"] => array(1) {
            ["name"] => string(6)
            "jQuery"
        }
    }[10] => array(2) {
        ["id"] => int(16)["skill"] => array(1) {
            ["name"] => string(5)
            "XHTML"
        }
    }[11] => array(2) {
        ["id"] => int(17)["skill"] => array(1) {
            ["name"] => string(3)
            "CSS"
        }
    }
}
}

EDIT: Here is the var_dump after the foreach $linkedInResults['skills']['values']:

// Just a sample as its quite long

array(13) {
  [0]=>
  array(2) {
    ["id"]=>
    int(1)
    ["skill"]=>
    array(1) {
      ["name"]=>
      string(21) "British Sign Language"
    }
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(7)
    ["skill"]=>
    array(1) {
      ["name"]=>
      string(6) "Drupal"
    }
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(8)
    ["skill"]=>
    array(1) {
      ["name"]=>
      string(9) "WordPress"
    }
  }
  [3]=>
  array(2) {
    ["id"]=>
    int(9)
    ["skill"]=>
    array(1) {
      ["name"]=>
      string(15) "iOS development"
    }
  }
  [4]=>
  array(2) {
    ["id"]=>
    int(10)
    ["skill"]=>
    array(1) {
      ["name"]=>
      string(7) "Magento"
    }
  }
  [5]=>
  array(2) {
    ["id"]=>
    int(11)
    ["skill"]=>
    array(1) {
      ["name"]=>
      string(10) "Web Design"
    }
  }

How do I get all the values for "name" only and add them into an array?


Solution

  • You need to foreach over an array. In your example, the only thing that is an array is $linkedInResults['skills']['values'].

    Then from there, you can get each of their names.

    $arr_skills = array();
    foreach($linkedInResults['skills']['values'] as $addSkill){
        $arr_skills[] = $addSkill['skill']['name'];
    }