Взрывающийся элемент уровня 2 массива PHP / Typescript - PullRequest
0 голосов
/ 20 октября 2019

У меня есть этот PHP код, который форматирует массив для меня,

    $data  = $dataQuery->fetchAll(PDO::FETCH_ASSOC);
    if(count($data)){
        $data_arr=array();
        $data_arr["records"]=array();
        $data_arr["records"] = $data;
    return $response
                ->withHeader('Content-Type','application/json')
                ->withJson($data_arr, 200); 
    }

, и мой массив в формате,

"records": [
{
"ID": "1",
"LOCATION": "LOC1#LOC2#LOC3",
"TIMEFRAME": "1601-1650",
"TYPE": "mythological#genre#portrait"
},
{
"ID": "2",
"LOCATION": "LOC2",
"TIMEFRAME": "1851-1900",
"TYPE": "landscape"
}
]

И я пытаюсь отформатироватьэто похоже на следующее, взорвав все #

"records": [
{
"ID": "1",
"LOCATION": [{LOC1, LOC2, LOC3}],
"TIMEFRAME": "1601-1650",
"TYPE": [{mythological, genre, portrait}]
},
{
"ID": "2",
"LOCATION": "LOC2",
"TIMEFRAME": "1851-1900",
"TYPE": "landscape"
}
]

Как это,

    //$data  = $dataQuery->fetchAll(PDO::FETCH_ASSOC);
    if($count['COUNT']>0/* &&count($data) */){
        $data_arr=array();
        $data_arr["records"]=array();

        //$data_arr["records"] = $data;
        while ($row = $dataQuery->fetch(PDO::FETCH_ASSOC)){
            extract($row);
            $row_array=array();
            foreach ($row as $row_el){ 
                array_push($row_array, explode('#', $row_el));
            } 
            array_push($data_arr["records"], $row_array);
        }

    return $response
                ->withHeader('Content-Type','application/json')
                ->withJson($data_arr, 200); 
    }

Но это приводит к следующему результату,

"records":[ 
   [ 
      [ 
         "1"
      ],
      [ 
         "LOC1",
         "LOC2",
         "LOC3"
      ],
      [ 
         "1601-1650"
      ],
      [ 
         "mythological",
         "genre",
         "portrait"
      ]
   ],
   [ 
      [ 
         "2"
      ],
      [ 
         "LOC2"
      ],
      [ 
         "1851-1900"
      ],
      [ 
         "landscape"
      ]
   ]
]

Я ловлю этот ответ в Typescript / JavaScript, чтобы я мог отформатировать его и на стороне клиента.

1 Ответ

1 голос
/ 20 октября 2019

Хотя я не уверен, будет ли проще ориентироваться на конкретное значение отдельно, а не обрабатывать запись who.

По сути, вам необходимо убедиться, что вы возвращаете данные с исходным ключом, а также данные.

Последняя часть состоит в том, что если есть только 1 элемент (как в "ID": "1",)), перестаньте быть массивом, присвоив ему исходное значение ...

foreach ($row as $key => $row_el){ 
    $expand = explode('#', $row_el);
    if ( count($expand) == 1 )  {
        $expand = $row_el;
    }
    $row_array[$key] = $expand;
} 

Обновлен код для большего количества уровней кодирования ...

$SQL_RE=array(
    "COUNT" => "5",
    "FORM" => "1&#painting",
    "SCHOOL" => "1&#German",
    "LOCATION" => "1&#Alte Pinakothek, Munich##2&#Kunsthistorisches Museum, Vienna##3&#Private collection",
    "TIMEFRAME" => "1&#1601-1650",
    "TYPE" => "1&#mythological##2&#genre##3&#portrait");

$row_array = [];
foreach ($SQL_RE as $key => $row_el){
    $expand2 = [];
    $l2 = [];
    $expand = explode('##', $row_el);
    foreach ( $expand as $key2 => $element2 )    {
        $expand2 = explode("&#", $element2 );
        if ( count($expand2) == 1 )  {
            $l2[$key2] = $element2;
        }
        else {
            $l2[$expand2[0]] = $expand2[1];
        }
    }
    if ( count($l2) == 1 && count($expand2) != 2 )  {
        $l2 = $row_el;
    }
    $row_array[$key] = $l2;
} 

print_r($row_array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...