Доступ к JSON в PHP Foreach

#php #json

#php #json

Вопрос:

Я не смог вставить данные json в свою функцию PHP.У меня есть данные json ниже в файле posts.json:

НЕТ: a1, a11 и т. Д. Являются Только образцом, Поэтому, пожалуйста, не предлагайте его логику

 {
  "posts": [
    {
      "post_name": "a1",
      "post_title": "a11",
      "_is_location": "a111",
      "_hook": "a1111"
    },
    {
      "post_name": "a2",
      "post_title": "a22",
      "_is_location": "a222",
      "_hook": "a2222"
    }
  ]
}
 

Ниже приведен фрагмент кода PHP:

 $jsonDecode = json_decode(__DIR__ . '/posts.json', true);
foreach($jsonDecode['posts'] as $post_json) {
    //create a variable to specify the details of page
    $post = array(
        'post_name' => $post_json['post_name'],
        'post_content'   => 'This is a example content', //content of page
        'post_title'     => $post_json['post_title'], //title of page
 

обычно моя функция PHP работает, но когда я изменил текст с помощью своих переменных PHP для json, он не работает.

если я использую свою функцию следующим образом:

  'post_name' => 'example name',
 

это работает. но с приведенным ниже, это не работает:

  'post_name' => $post_json['post_name'],
 

Ошибка PHP из файла журнала WordPress:

  Invalid argument supplied for foreach()
 

Комментарии:

1. Вы получаете сообщения об ошибках? Не совсем понятно, в чем ваша проблема

2. @RiggsFolly ошибки нет. обычно он должен добавлять новые сообщения с помощью «foreach», но это не так

3. Вы могли бы выполнить var_dump($jsonDecode); var_dump($post_json); чтобы убедиться, что вы ожидаете того, что вы получаете.

4. @RiggsFolly Прошу прощения за неверную информацию. Я проверил это снова, и я вставил ошибку в вопрос, можете ли вы посмотреть еще раз?

5. это выглядит как json_decode() сбой, лучше проверьте, что файл на самом деле выглядит так, как вы думаете, и что он находится на этом пути и что он является допустимым json

Ответ №1:

Я подозреваю, что если вы добавите строки…

 error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
 

… в верхней части вашего документа вы получите уведомления, похожие на:

Внимание: попытка получить доступ к смещению массива по значению типа null в..

Предупреждение: недопустимый аргумент, указанный для foreach() в…

Это потому json_decode , что принимает as string в качестве первого параметра, и вы предоставляете ему местоположение файла…

Изменить:

 $jsonDecode = json_decode(__DIR__ . '/posts.json', true);
 

Для:

 $jsonDecode = json_decode(file_get_contents(__DIR__ . '/posts.json'), true);
 

… и это должно сработать.

Ответ №2:

 $jsonDecode = json_decode(file_get_contents(__DIR__ . '/posts.json'), true);
foreach($jsonDecode['posts'] as $post_json) {
    //create a variable to specify the details of page
    $post = array(
        'post_name' => $post_json['post_name'],
        'post_content'   => 'This is a example content', //content of page
        'post_title'     => $post_json['post_title'], //title of page
    );
}
 

Этот код работает, но я предполагаю, что вы получаете только 1 $post случай в массиве.

Так что измените эту строку

 $post = array(
 

Для

 $post[] = array(
 

Теперь вы получите все вхождения

Комментарии:

1. Я знаю, как я уже сказал, пропустил это

2. Вы правы в том $post[] , что в противном случае он будет перезаписан! (Я предположил, что это была опечатка, поскольку он сказал, что это работает «нормально»)