У меня есть конкретный файл 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

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

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""hYtr54Ds""Users"

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

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

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

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

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

0
Frank Eno 18 Сен 2018 в 14:42

2 ответа

Лучший ответ

Вы можете заглянуть в объект во время второго цикла, чтобы узнать, есть ли у него свойство с именем 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
  }
}
2
James 18 Сен 2018 в 12:23

Вместо

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
    }
}
1
Roshni hegde 18 Сен 2018 в 11:58