Цикл PHP array — невозможно получить доступ к элементам

#php #arrays #for-loop #curly-braces

#php #массивы #for-цикл #фигурные скобки

Вопрос:

У меня есть массив. Это происходит из этого запроса:

 $table_array=array();
$table_array = $mydb->get_results($mydb->prepare("SELECT sid, stitle FROM tablename")); 
 

Я успешно извлекаю данные. Консоль показывает, что json_encode возвращается через ajax (функция успеха):

 function align_surveys(){
        jQuery.ajax({
        type: 'POST',
        url: MyAjax.ajaxurl,
        data: {"action": "align_sids"},
        success:
            function(data){
                console.log('data: '  data)
                }             
        }); 
}

"data:":[{"sid":"525331","stitle":"First Title"},{"sid":"367775","stitle":"Second Title"}]
 

Однако, когда я запускаю цикл foreach, я получаю ошибку 500 при попытке получить доступ к его элементам.

Это ошибки:

 foreach($table_array as $row){
  $s_ids[] = $row[0];
}
 

И, это ошибки:

 foreach($table_array as $row){
  $s_ids[] = $row['sid'];
}
 

gettype говорит мне, что это на самом деле массив. Но всякий раз, когда я ссылаюсь на элемент массива, я выдаю ошибку. Я не могу ее решить. Это как-то связано с дополнительными фигурными скобками внутри квадратных скобок? Кто-нибудь, пожалуйста, укажите мне правильное направление. Прошло несколько часов….

ОБНОВЛЕНИЕ: print_r покажи мне это:

 Array ( [0] => Array ( [surveyls_survey_id] => 525331 [0] => 525331 [surveyls_title] => New Survey [1] => New Survey ) [1] => Array ( [surveyls_survey_id] => 367775 [0] => 367775 [surveyls_title] => Second Survey [1] => Second Survey ) )
 

Мне кажется, что это массив массивов, где ключи на самом деле являются значениями…Не знаю, как и почему я получаю именно такой результат.

Ответ №1:

Эти «данные» в начале выглядят так, как будто они отделены от другого объекта. Попробуйте table_array['data'] и посмотрите, работает ли это для вас. Если нет, можете ли вы опубликовать весь объект json, который выводится с помощью json_encode.

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

1. Эти «данные:» — это всего лишь часть консоли. оператор журнала — чтобы помочь мне разобраться.

Ответ №2:

Я решил это. Мне пришлось json_encode массив, чтобы я мог эффективно его анализировать. Спасибо за ваш вклад.

Ответ №3:

Есть несколько причин, по которым у вас может возникнуть эта проблема.

Первый, по-видимому, адресуется там, где вы явно задали тип array() ; Второй — с помощью команды JSON_DECODE . Если вы используете логическое значение true / false с этой функцией, она может возвращать массив или объект.

$mayarray = json_decode($jsonobject,true);

Это загружает данные JSON в ассоциативный массив. Если вы используете false или оставляете его пустым, в зависимости от вашей конфигурации PHP, он вернется как объект, что означает, что если вы попытаетесь получить к нему доступ, как если бы это был массив, вы получите ошибку 500.