2017-07-24 58 views
0

目前,我有以下几点:选择关联数组中的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

这是初始化为''$ i'的方式($ I-1; $ I <=$r-> NUM_ROWS; $ I ++){'?它应该是'for($ i = 0 ...' –

+0

'table'中的'key1'和'key2'列吗? – Terminus

+0

@Terminus是的,与value1和value2一样 –

回答

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; 
} 
+0

潜在的 - 但目标是将所有东西都移到MySql上 –

+0

只是mysql?哦,我现在看到问题了,我的问题很糟糕,在这种情况下,你的OP可能是[this问题](https://stackoverflow.com/questions/10925445/mysql-select-dynamic-row-values-as-column-names-another-column-as-value) – Terminus