2017-07-24 48 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