Javascript 分解PHP/Typescript数组的第2层元素
我有一个Javascript 分解PHP/Typescript数组的第2层元素,javascript,php,arrays,typescript,multidimensional-array,Javascript,Php,Arrays,Typescript,Multidimensional Array,我有一个PHP代码,它正在为我格式化数组 $data = $dataQuery->fetchAll(PDO::FETCH_ASSOC); if(count($data)){ $data_arr=array(); $data_arr["records"]=array(); $data_arr["records"] = $data; return $response ->withHe
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"
}
]
我正试图通过分解所有的#
像这样,
//$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捕获此响应,因此我也可以在客户端格式化此响应。尽管我不确定单独确定特定值是否比处理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ف-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);
你的代码片段工作得很好!我在使用这个,
foreach($row_el_h=>$row_el){array_push($row_array[$row_el_h]),explode('.',$row_el));}
,为什么不起作用?另外,如果我试图避免for
循环,是否可以使用map
或其他内置库来解决此问题?如果要分配给数组中的特定键,array\u push()
不是您想要的,直接分配即可。至于array\u map()
-它(内部)几乎与数组上的循环相同,因此这段代码是你能得到的最简单的代码。嗯,无论如何,你能给我一个使用array\u map
的例子吗,使用第3层
变得越来越复杂,进入第3层元素可以吗?当我每页只使用10条记录时,不应该出现复杂性。很难知道你的意思,也许如果你展示一个例子,它可能会有所帮助。看,我的弗兰克斯坦函数是我需要的,但它是混乱的,我的意思是太多的条件。再说一次,《美丽公主》是一种干净整洁的方式,但我不能给它加上钥匙。
$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ف-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);