我目前有以下内容:
$query='select concat("[",key,"=>",value,"]")
from table';
if(isset($query))$r=$mysql->query($query);
if(isset($r)){
for($i=1;$i<=$r->num_rows;$i++){
$r->data_seek($i-1);
$a[$i-1]=$r->fetch_array(MYSQLI_ASSOC);
$a[$i-1]=parse_array($a[$i-1]);
}
}
$mysql->close;
function parse_array($parent){
foreach($parent as$k=>$val){
if(strpos($val,']')){
$array=explode(',',substr($val,1,-1));
foreach($array as$val){
$keypair=explode("=>",$val);
$newarray[$keypair[0]]=$keypair[1];
}
$parent[$k]=parse_array($newarray);
}
}
}
必须有一种更优雅的方式来做到这一点 - 也许内置于MySQL中?我正在努力减少运行PHP的时间 - 我希望它以数组形式到达PHP,但是如果我尝试子查询,MySQL会踢Subquery returns more than one result
。
修改:此处为table
:
+----------+----------+
| value | key |
+----------+----------+
| img.jpg | src |
+----------+----------+
输出应为:
[
'src'=>'img.jpg'
]
答案 0 :(得分:0)
将所有操作移至php。使用数字索引获取查询。假设每个偶数索引都是一个键,每个奇数索引都是一个值(反之亦然)。
$query = 'select key1, value1, key2, value2
from table';
if(isset($query))
$result = $mysql->query($query);
if(isset($result)) {
$newResult = []; // if your version of php doesn't support this syntax to create a new array use `$newResult = array();`
while($row=$result->fetch_array(MYSQLI_NUMERIC)) {
$newResult[] = build_assoc_array($row);
}
}
$mysql->close;
function build_assoc_array($flat_arr) {
$newArr = [];
$numCol = count($flat_arr);
for($colIndex = 0; $colIndex < $numCol; $colIndex+=2) {
$newArr[$flat_arr[$colIndex]] = $flat_arr [$colIndex+1];
}
return $newArr;
}