在mysql中选择关联数组

时间:2017-07-24 11:41:18

标签: php mysql

我目前有以下内容:

 $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'
 ]

1 个答案:

答案 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;
}