Фильтровать массив JSON с объектами внутри в PHP - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть определенный JSON-файл, который выглядит следующим образом:

[
    {
        "objID":"kc6BvvNlVW",
        "string":"bill",
        "createdOn":"2018-09-18T01:51:02",
        "updatedOn":"2018-09-18T01:51:02",
        "number":1,
        "boolean":true,
        "array":["item1","item2"],
        "pointer":{"type":"__pointer","objID":"hYtr54Ds","className":"Users"}
    },
    {
        "objID":"sS1IwFPPWh",
        "string":"tom",
        "createdOn":"2018-09-18T01:59:40",
        "updatedOn":"2018-09-18T01:59:40",
        "number":12.3,
        "boolean":false,
        "array":["item1","item2"],
        "pointer":{"type":"__pointer","objID":"tRe4Fda5","className":"Users"}
    }
]

1. Мне нужно сначала проверить, имеет ли "указатель" объект "__pointer" внутри клавиши type и показать только значение objID в таблице HTML, например:

"tRe4Fda5"

Прямо сейчас, вот так выглядит мой стол:

My HTML table output

А вот мой foreach код PHP (в строку таблицы):

foreach($jsonObjs as $i=>$obj) {  
  $row_id = $i;    
  echo '<tr>'; 

  foreach($obj as $key => $value){

   // $value is an Array:
   if (is_array($value)) {
      echo '<td>';
      foreach($value as $k=>$v){
         // $v is a Pointer
         if ($v === '__pointer') {

            echo json_encode($v); // <-- WHAT SHOULD I DO HERE ? 

         // $v is an Array:
         } else {
            echo json_encode($v);
         }
       }
       echo '</td>';

      // $value is a Number:
      } else if (is_numeric($value)){
         echo '<td>'.(float)$value.'</td>';

     // $value is a String:
     } else { echo '<td>'.$value.'</td>'; }
  }

Как вы можете видеть в столбце pointer , строка, которую я получаю:

"__pointer""hYtr54Ds""Users"

без запятых в качестве разделителей, поэтому эту строку кода мне нужно отредактировать:

echo json_encode($v); // <-- WHAT SHOULD I DO HERE ? 

Я пробовал с echo json_encode($v[$k]['__ponter']);, но без положительных результатов.

Итак, мой последний первый вопрос: как я могу получить каждое ЗНАЧЕНИЕ «указателя» массива?

2. Кроме того, во второй строке логического столбца отображается примечание, так как его значение равно false, не должно ли оно отображаться 0 , поскольку в первой строке отображается 1 (правда)?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете просмотреть объект во время второго цикла, чтобы увидеть, имеет ли он свойство с именем type и установлено ли это свойство в __pointer.

foreach($jsonObjs as $i=>$obj) {  
  $row_id = $i;    


  foreach($obj as $key => $value){
    // see if $value has a type property that is set to pointer
    if (isset($value['type']) && $value['type'] == "__pointer") {
      // $value is the pointer object.  Do with it what you will
      echo "<td>" . $value['objID'] . "</td>";
    }

    // more code
  }
}
0 голосов
/ 18 сентября 2018

вместо

foreach($value as $k=>$v){
         // $v is a Pointer

используйте

foreach($value as $k)
{
    //then check for pointer
    if($k->type  === '__pointer')
    {

       echo json_decode($k); //here you will get proper key and value
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...