как преобразовать эту строку в массив? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь преобразовать этот массив, созданный в JS, чтобы затем использовать его в моем контроллере для использования в foreach и использовать данные массива. Я использую codeigniter фреймворка.

Здесь, где я создаю массив в моем файле JS.

function get_array(){
  var datos = []; // Array
  $("#tbl_esctructura tbody > tr").each(function() {

    var item = $(this).find('td:eq(1)').text();
    var cantidad = $(this).find('td:eq(4)').text();

    datos.push({
       "item": item,
       "cantidad": cantidad
    });
  });

  datos =  JSON.stringify(datos); 
  $.ajax({
        data: {
            'datos': datos
        },
        url: "<?php echo base_url() ?>Controller/data_from_array",
        type: 'POST',
        dataType : "json",
        success: function(response) {

        }
    });
}

данные, которые я отправляю в контроллер, выглядят так. [{"item":"1","cantidad":"2"},{"item":"2","cantidad":"4"}]

Теперь мой контроллер PHP

public function data_from_array(){
   $data   =  $this->input->post('datos', TRUE);
   $items = explode(',', $data);
   var_dump($items);
   foreach ($items as $row) {
       echo  $row->item.'<br>';
   }
}

и var_dump($items) это результат

array(2) { [0]=> string(12) "[{"item":"1"" [1]=> string(16) ""cantidad":"1"}]" } }

И в это эхо я получаю эту ошибку Message: Trying to get property 'item' of non-object

и я не знаю, что я делаю неправильно

Ответы [ 3 ]

3 голосов
/ 18 февраля 2020

выглядит как стандарт JSON. Обязательно добавьте true в функцию json_decode (второй параметр), чтобы возвращать массив вместо объекта.

$result = json_decode($data, true); 

Посмотрите на JSON, так как это, в настоящее время, стандарт обмена данными для Интернета и мобильных устройств. приложения и узнайте больше о функции:

https://www.php.net/manual/en/function.json-decode.php

также посмотрите на его аналог, который будет кодировать ваши массивы в JSON формат:

https://www.php.net/manual/en/function.json-encode.php

0 голосов
/ 18 февраля 2020

есть два сценария ios:

  1. , если вы хотите проанализировать JSON объект, тогда

    $items = json_decode($data); // instead of $items = explode(',', $data);
    
  2. , если вы хотите обрабатывать данные как строки, тогда

    echo  $row[0].'<br>'; // instead of echo  $row->item.'<br>';
    
0 голосов
/ 18 февраля 2020

Вы можете использовать этот код в качестве массива возврата разнесения, а не объекта.

public function data_from_array(){
  $data   =  $this->input->post('datos', TRUE);
  $items = explode(',', $data);
  var_dump($items);
   foreach ($items as $row) {
      echo  $row["item"].'<br>';
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...