2016-11-29 12 views
1

にフェッチを行います。私がしたいのは、各列を別々の配列に入れることです。 私が行う場合:は、私はこのクエリを持っている別の2つが同じクエリ結果

$labels=$all->fetchAll(PDO::FETCH_COLUMN,0); 

は私が探しています形式の最初の列の値を取得します。最初のフェッチの後

$values=$all->fetchAll(PDO::FETCH_COLUMN,1); 

をしかし$allは最初の取出しによって設定解除され、その結果が$valuesは空の配列は、(私はこれをかなり確信していたが、それを試してみるやった)であるということである: 私が実行しようとしました。 私は両方の列で配列を取得した後にPHPで配列を構築できますが、私はPDO APIを使用して目標を達成する方法を知りました。

+0

おそらく2番目の変数$ second = $ allを使用してください。または$ second = clone($ all)? – Fky

+0

'while' +' fetch'を使い、すべての要素を適切な配列に入れることができますか? –

+0

@fkyこれは動作しません –

答えて

3

もちろん、fetchAll()はデータを1回だけ返すので、このようには動作しません。

私は考えることができる唯一のアイデアはPDO::FETCH_KEY_PAIR一定である:あなたがこれを過度に複雑されているように感じる

$data = $all->fetchAll(PDO::FETCH_KEY_PAIR); 
$labels = array_keys($data); 
$values = array_values($data); 
+0

これは非常に良いアイデアです。リンクにも感謝します。私はPDOのフェッチモードのためのグーグルが、この1つに気付かなかった –

3

。これはPHPで簡単に行えます。PDOStatement::fetchを使用するだけで、配列の操作について心配する必要はありません。多くのデータを持っている場合は、メモリ使用量に対してより親しみやすくなります。

$labels = []; 
$values = []; 

while ($row = $all->fetch(PDO::FETCH_NUM)) { 
    $labels[] = $row[0]; 
    $values[] = $row[1]; 
} 
+0

ありがとう!私はこれが簡単にこのように行われていることに同意します(実際これは私が設定したコードです)。しかし、PDOフェッチモードをもう少し深く掘り下げて、このコードの代わりを代わりにしようとしました –

+0

@LelioFaieta正直言って、これはあまりエキゾチックではないにしても、おそらく最善の方法でしょう。使用法。受け入れられた答えは2倍多く使用されます。 – lonesomeday

+0

はい。私は記憶について知っている。受け入れられた答えは質問に答えるものですが、私はあなたが従う方法であることに同意します(また、私は大量の行を管理する必要があるためです) –

2

おそらくarray_columnを使用できます。

$all = $dbh->query(" 
    SELECT DISTINCT movimenti.nome, SUM(movimenti_carta.importo) AS importo 
    FROM movimenti_carta 
    JOIN movimenti ON movimenti_carta.movimento=movimenti.id 
    WHERE month(data)='$mese' 
    AND year(data)='$anno' 
    GROUP BY movimenti.nome 
"); 
// set of results indexed by column name 
$results = $all->fetchAll(PDO::FETCH_ASSOC); 
// set of values from the column 'nome' 
$nomes = array_column($results, 'nome'); 
// set of values from the column 'importo' 
$importos = array_column($results, 'importo'); 
関連する問題