Как разобрать объект std, чтобы получить определенные c данные - PullRequest
1 голос
/ 26 мая 2020

Я попытался преобразовать этот результат в массив, я использовал json_decode (), но всегда получал null, затем использовал Service_ json () и решал проблему.

После этого я получил это результат, но теперь мне трудно получить некоторые конкретные c данные, такие как category ie, nom, marque и их значения, и я получил пустой результат.

Вот массив:

array(1) {
  ["hits"]=>
  object(stdClass)#3 (1) {
    ["hits"]=>
    array(7) {
      [0]=>
      object(stdClass)#4 (2) {
        ["_id"]=>
        string(20) "kN5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#5 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(29) "Bonbons parfums fruits MENTOS"
        }
      }
      [1]=>
      object(stdClass)#6 (2) {
        ["_id"]=>
        string(20) "kd5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#7 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(21) "Bonbons menthe MENTOS"
        }
      }
      [2]=>
      object(stdClass)#8 (2) {
        ["_id"]=>
        string(20) "kt5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#9 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(37) "Bonbons caramel/chocolat blanc MENTOS"
        }
      }
      [3]=>
      object(stdClass)#10 (2) {
        ["_id"]=>
        string(20) "k95iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#11 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "Mentos"
          ["nom"]=>
          string(31) "Bonbons caramel/chocolat MENTOS"
        }
      }
      [4]=>
      object(stdClass)#12 (2) {
        ["_id"]=>
        string(20) "lN5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#13 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(28) "Bonbons menthe sucres MENTOS"
        }
      }
      [5]=>
      object(stdClass)#14 (2) {
        ["_id"]=>
        string(20) "ld5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#15 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(31) "Bonbons framboise orange MENTOS"
        }
      }
      [6]=>
      object(stdClass)#16 (2) {
        ["_id"]=>
        string(20) "lt5iEXIBfVAlCluoT3sT"
        ["_source"]=>
        object(stdClass)#17 (3) {
          ["categorie"]=>
          string(7) "Bonbons"
          ["marque"]=>
          string(6) "MENTOS"
          ["nom"]=>
          string(26) "Bonbons pomme verte MENTOS"
        }
      }
    }
  }
}

Как я могу проанализировать этот массив, чтобы получить категорию ie nom и marque и их значения?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Не тестировалось, но я думаю, это то, что вам нужно для получения значений внутренних элементов, используя foreach,

foreach($result['hits']->hits as $key=>$value){
   echo $value->_source->categories, $value->_source->marque, $value->_source->nom.PHP_EOL;
}
0 голосов
/ 26 мая 2020

См. Пример ниже, чтобы узнать, как поступить в вашей ситуации.

class Person implements JsonSerializable
{
    protected $id;
    protected $name;

    public function __construct(array $data) 
    {
        $this->id = $data['id'];
        $this->name = $data['name'];
    }

    public function getId() 
    {
        return $this->id;
    }

    public function getName() 
    {
        return $this->name;
    }

    public function jsonSerialize()
    {
        return 
        [
            'id'   => $this->getId(),
            'name' => $this->getName()
        ];
    }
}
$person = new Person(array('id' => 1, 'name' => 'Amir'));
echo json_encode($person,JSON_FORCE_OBJECT);

Чтобы получить результат json, который является строкой, чтобы иметь возможность выполнять итерацию, выполните что-то вроде:

$json = json_decode($json);

L oop через объект и получить его члены с помощью чего-то вроде:

foreach($json as $obj){
   echo $obj->name;
   .....

}

Надеюсь, этот рабочий процесс поможет вам достичь желаемого.

...