PHP цикл через массив JSON из базы данных

#php #json

#php #json

Вопрос:

У меня есть этот массив JSON, хранящийся в моей базе данных

 [{
    "prodid": 1,
    "optionsids": [],
    "extrasids": ["1"]
}, {
    "prodid": 2,
    "optionsids": [],
    "extrasids": ["4"]
}]
  

Я сохраняю его как массив, и когда я извлекаю его в PHP, я прохожу через это, и я на 100% уверен, что это неправильно

  $productsarray=json_encode($row['productids']);
 $obj = json_decode($productsarray, TRUE);
  

таким образом, я могу затем выполнить цикл, чтобы получить prodid значение

 $products='';
foreach( $obj as $key => $value) {
    $value = get_object_vars($value);
    $products = $products.$value;
}
  

Но я получаю Invalid argument supplied for foreach() ошибку, которая означает, что $obj это не массив, верно? idk как это исправить я пробовал разные вещи, но безрезультатно.

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

1. Если он уже сохранен в формате json, вам не нужно json_encode использовать его снова, когда вы извлекаете его из базы данных. Также при использовании true в json_decode весь $obj массив будет ассоциативным, поэтому последующее get_object_vars может быть непредсказуемым с введенным в него ассоциативным массивом.

2. Пожалуйста, предоставьте желаемый результат

Ответ №1:

Если это string сохраненный в вашей базе данных столбец:

 [{
    "prodid": 1,
    "optionsids": [],
    "extrasids": ["1"]
}, {
    "prodid": 2,
    "optionsids": [],
    "extrasids": ["4"]
}]
  

Если он уже сохранен в формате json, вам не нужно json_encode использовать его снова, когда вы извлекаете его из базы данных.

Следующее — это все, что вам нужно сделать, чтобы собрать все prodid в один массив для использования:

 $items = json_decode($row['productids'],true);
$products = [];
foreach($items as $item) {
    $products[] = $item['prodid'];
}
var_dump($products);// for debug to see the result

$product_string = implode(',',$products);// to put all prodid in a single string