Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分解PHP/Typescript数组的第2层元素_Javascript_Php_Arrays_Typescript_Multidimensional Array - Fatal编程技术网

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&#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);

你的代码片段工作得很好!我在使用这个,
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&#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);