2017-11-23 8 views
-1

結果:MySQLを取得することは、私は、このテーブルを持っているシリアル化されたデータに

| id | related_id | 
| 1 | 100  | 
| 1 | 200  | 
| 1 | 300  | 
| 2 | 400  | 
| 2 | 500  | 
| 2 | 600  | 

として、私はシリアル化されたデータを取得する必要があります。私が取得しようとしている

a:3:{i:1;s:3:"100";i:2;s:3:"200";i:3;s:3:"300";} 

クエリ

SELECT id, related_id from mytable where id = 1; 

これを使って 'while'

$result = $link->query($query); 
$item = array(); 

while($f = $result->fetch_assoc()){ 
    $id = $f['id']; 
    if ($id == $f['id']){ 
    $item[] = $f['related_id']; 
    } 
    print serialize($item); 
    break; // for test 
} 

(アーウィンが提供する - ありがとう!)私の作品SOLUTION何をしようとする

$item = array(); 
while($f = $result->fetch_assoc()) { 
    $id = $f['id']; 
    if (!array_key_exists($id, $item)) { 
    $item[$id] = [1 => $f['related_id']]; 
    } else { 
    $item[$id][] = $f['related_id']; 
    } 
} 
foreach ($item as $value) { 
    print serialize($value) . PHP_EOL; 
} 
+1

あなたが結果として得ようとしているロジックは何ですか? –

+1

あなたの試行はどうなりますか?どこが間違っていますか? Btw、期待される出力は2つの配列で、1つではありません。 –

+0

これはたぶんtypoです: 'if($ id = $ f ['id'])'。 '='は変数を設定し、 '=='は緩やかな比較を行い、 '==='は厳密な比較を行います(データ型は一致しなければなりません)。しかし、if文は変数を上に設定しているので役に立たない。基本的には、「$ idをxに設定する」と次の行に「$ idがxであるかどうかを確認する」と言っています。明らかにxに設定しているのでxになります。 –

答えて

1

最初のごwhile loopとIDの配列をそれぞれrelated_idや店舗を収集します。次に、それぞれforeachを使用して印刷します。

$item = array(); 
while($f = $result->fetch_assoc()) { 
    $id = $f['id']; 
    if (!array_key_exists($id, $item)) {  // create id array if not exist 
     $item[$id] = [1 => $f['related_id']]; // To start with index 1 
    } else { 
     $item[$id][] = $f['related_id'];  // Push each new related_id 
    } 
} 

foreach ($item as $value) { 
    print serialize($value); // Print each serialized 
    echo '<br>';    // New line 
} 
1

はこのようなものである:あなたのシリアライズされた文字列のために

$result = $link->query($query); 
$items = array(); 

while($f = $result->fetch_assoc()){ 
    $id = $f['id']; 
    if(!isset($items[$id])) { 
    $items[$id] = array(); 
    } 
    $items[$id][] = $f['related_id']; 
} 

foreach($items as $item) { 
    print serialize($item); 
} 

、あなたは仕事をしなければなりません2番目の層にrelated_idを持つ配列で置き換えます。最初の層は、すべてのrelated_idを同じidの配列に保存することです。

0

あなたは6行、3はid1と3がid2です。これらのIDを配列キーとして使用するように指定すると、それぞれが3つの値を持つ2つの配列になります。

あなたはこれを行う独自の配列内の各行をしたい場合:

while($f = $result->fetch_assoc()){ 
    $item[] = array($f['id'] => $f['related_id']); 
    } 
関連する問題