Php 从MySQL查询填充多维数组
我正在尝试从MySQL查询创建多维数组 查询:Php 从MySQL查询填充多维数组,php,arrays,multidimensional-array,while-loop,Php,Arrays,Multidimensional Array,While Loop,我正在尝试从MySQL查询创建多维数组 查询: $STH = $DBH->query( "SELECT value, o_ID, oName, date, DATE_FORMAT(date, '%d %m %Y') as FDate, DATE_FORMAT(tsTime, '%H:%i') as FTime FROM test
$STH = $DBH->query( "SELECT value, o_ID, oName, date,
DATE_FORMAT(date, '%d %m %Y') as FDate,
DATE_FORMAT(tsTime, '%H:%i') as FTime
FROM test tst
LEFT JOIN object o
ON tst.o_ID =o.oID
WHERE DATE(date) = '$date'
ORDER BY FDate, FTime, oName ASC");
$STH->setFetchMode(PDO::FETCH_ASSOC);
$returnValue = array();
$data = array();
while ( $row = $STH->fetch() ) {
$returnValue[$row['oName']] =
array(
$data[] = array(
'time' => $row['FTime'], 'value' => $row['value']
)
);
}
{"objectA":[{"time":"23:55","value":"15"}],"objectB":[{"time":"23:55","value":"15.90"}],..}
{"objectA":[{"time":"01:00","value":"15"},{"time":"02:00","value":"11"},{"time":"03:00,"value":"16"}],"objectB":[{"time":""01:00","value":"12"},{"time":""02:00","value":"25"},{"time":""03:00","value":"5"}],..}
循环:
$STH = $DBH->query( "SELECT value, o_ID, oName, date,
DATE_FORMAT(date, '%d %m %Y') as FDate,
DATE_FORMAT(tsTime, '%H:%i') as FTime
FROM test tst
LEFT JOIN object o
ON tst.o_ID =o.oID
WHERE DATE(date) = '$date'
ORDER BY FDate, FTime, oName ASC");
$STH->setFetchMode(PDO::FETCH_ASSOC);
$returnValue = array();
$data = array();
while ( $row = $STH->fetch() ) {
$returnValue[$row['oName']] =
array(
$data[] = array(
'time' => $row['FTime'], 'value' => $row['value']
)
);
}
{"objectA":[{"time":"23:55","value":"15"}],"objectB":[{"time":"23:55","value":"15.90"}],..}
{"objectA":[{"time":"01:00","value":"15"},{"time":"02:00","value":"11"},{"time":"03:00,"value":"16"}],"objectB":[{"time":""01:00","value":"12"},{"time":""02:00","value":"25"},{"time":""03:00","value":"5"}],..}
输出:
$STH = $DBH->query( "SELECT value, o_ID, oName, date,
DATE_FORMAT(date, '%d %m %Y') as FDate,
DATE_FORMAT(tsTime, '%H:%i') as FTime
FROM test tst
LEFT JOIN object o
ON tst.o_ID =o.oID
WHERE DATE(date) = '$date'
ORDER BY FDate, FTime, oName ASC");
$STH->setFetchMode(PDO::FETCH_ASSOC);
$returnValue = array();
$data = array();
while ( $row = $STH->fetch() ) {
$returnValue[$row['oName']] =
array(
$data[] = array(
'time' => $row['FTime'], 'value' => $row['value']
)
);
}
{"objectA":[{"time":"23:55","value":"15"}],"objectB":[{"time":"23:55","value":"15.90"}],..}
{"objectA":[{"time":"01:00","value":"15"},{"time":"02:00","value":"11"},{"time":"03:00,"value":"16"}],"objectB":[{"time":""01:00","value":"12"},{"time":""02:00","value":"25"},{"time":""03:00","value":"5"}],..}
如何将所有值放入$data数组中
所需输出:
$STH = $DBH->query( "SELECT value, o_ID, oName, date,
DATE_FORMAT(date, '%d %m %Y') as FDate,
DATE_FORMAT(tsTime, '%H:%i') as FTime
FROM test tst
LEFT JOIN object o
ON tst.o_ID =o.oID
WHERE DATE(date) = '$date'
ORDER BY FDate, FTime, oName ASC");
$STH->setFetchMode(PDO::FETCH_ASSOC);
$returnValue = array();
$data = array();
while ( $row = $STH->fetch() ) {
$returnValue[$row['oName']] =
array(
$data[] = array(
'time' => $row['FTime'], 'value' => $row['value']
)
);
}
{"objectA":[{"time":"23:55","value":"15"}],"objectB":[{"time":"23:55","value":"15.90"}],..}
{"objectA":[{"time":"01:00","value":"15"},{"time":"02:00","value":"11"},{"time":"03:00,"value":"16"}],"objectB":[{"time":""01:00","value":"12"},{"time":""02:00","value":"25"},{"time":""03:00","value":"5"}],..}
试试这个:
while ( $row = $STH->fetch() ) {
$returnValue[] = array(
'time' => $row['FTime'], 'value' => $row['value']
);
}
试一试:
$returnValue = array();
while ( $row = $STH->fetch() )
{
if (!$returnValue[$row['oName']])
{
$returnValue[$row['oName']] = array();
}
$returnValue[$row['oName']][]= array(
'time' => $row['FTime'], 'value' => $row['value']
);
}
那会给你你想要的
这里的区别是,如果oName-键不存在,我将创建它,并为其分配一个新的空数组,然后向该数组添加一个新的辅助数组当第N行的
oName
已经有匹配的键时,我不会重新分配该键,但我只是将一个额外的数组推送到该键。尝试将while循环替换为while($row=$STH->fetch()){$returnValue[$row['oName']=array('time'=>$row['FTime'],'value'=>$row['value']))}
它将像这样返回它:[{“time”:“01:00”,“value”:“15”},{“time”:“02:00”,“value”:“11”},…]
解析错误:语法错误,在代码>前几行显示注意:未定义索引:objectA in…,注意:未定义索引:objectB in
但随后就可以了`{“objectA”:[{“time”:“00:00”,“value”:“15.90”},{“time”:“01:0”,“value”:“15.80”}……`@inTry:只需启动$returnValue
并为其分配一个数组,如果通知仍然出现,请尝试在if语句中使用数组键存在
或空
,而不是!$returnValue[]