2015-05-29 93 views
3

我創建它返回一個JSON文件,HTML文件,我填補了從data.php文件中的數據網格中data.php文件。 我需要這是在以下形式的關聯數組:PHP填補了一個關聯數組

[ 
{"CompanyName":"Alfreds Futterkiste","ContactName":"Maria Anders","ContactTitle":"Sales Representative"}, 
{"CompanyName":"Ana Trujillo Emparedados y helados","ContactName":"Ana Trujillo","ContactTitle":"Owner"}, 
{"CompanyName":"Antonio Moreno Taquera","ContactName":"Antonio Moreno","ContactTitle":"Owner"} 
] 

現在的問題是,我想這data.php是某種通用的,這意味着我不知道COLUMNNAMES也不是的列的數量。 我完成這項工作的唯一方法是使用switch語句,但這並不理想(因爲我可以創建多個案例,但如果表中有多個列,該怎麼辦)也不是很優雅。

我敢打賭,這是可以做到更好,任何想法?

我嘗試使用array_push(),但不具有關聯數組。

// get columnnames 
for ($i = 0; $i < $result->columnCount(); $i++) { 
    $col = $result->getColumnMeta($i); 
    $columns[] = $col['name']; 
} 

// fill up array 
while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
    switch (count($columns);) { 
     case 1 : 
      $records[] = array($columns[0] => $row[$columns[0]]); 
      break; 
     case 2 : 
      $records[] = array($columns[0] => $row[$columns[0]], $columns[1] => $row[$columns[1]]); 
      break; 
     case 3 : 
      $records[] = array($columns[0] => $row[$columns[0]], $columns[1] => $row[$columns[1]], $columns[2] => $row[$columns[2]]); 
      break; 
     case ... // and so on 
} 
} 

// send data to client 
echo json_encode($records); 
+3

如果我理解這個代碼的邏輯,我相信它可以全部簡化爲只使用'fetchAll()',就像'$ records'一樣= $ result-> fetchAll(PDO :: FETCH_ASSOC); echo json_encode($ records);'http://php.net/manual/en/pdostatement.fetchall.php因爲'fetchAll()'將檢索所有記錄的2D關聯數組,無論列數是多少。 –

+0

你可以使用循環來做到這一點。 – frz3993

+0

感謝邁克爾,在這種情況下甚至不需要循環。好的解決方案 –

回答

0

變化這一個

$arr_tmp = array(); 
 
for($i = 0; $i < count($columns); $i++) 
 
{ 
 
\t $arr_tmp[$columns[$i]] = $row[$columns[$i]] 
 
} 
 
$records []= $arr_tmp;

+1

偉大的解決方案Abdo!奇蹟般有效。只是想念一個「;」在$ arr_tmp [$ columns [$ i]] = $ row [$ columns [$ i]] –

+0

的末尾,是的,我忘記了';' :D thx –

0

開關的代碼段你可以遍歷列:

while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
    $values = array(); 
    foreach ($columns as $column) { 
     values[$column] = $row[$column]; 
    } 
    records[] = $values; 
} 
+0

我比Abdo更喜歡你的答案,儘管它們基本相同,但你使用的foreach循環更具可讀性。謝謝 !使其工作在值[$ column]和records []之前添加$。 –