将Mysql结果提取到序列化数据

时间:2017-11-23 22:56:14

标签: php mysql serialization

我有这张桌子:

| 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;

我试图使用'而#39;

$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
}

对我有用的解决方案(由Erwin提供 - 谢谢!)

$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;
}

3 个答案:

答案 0 :(得分: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);
}

对于序列化字符串,您必须在第二层使用带有related_id的数组。第一层是将所有related_id保存在具有相同id的数组中。

答案 1 :(得分:1)

首先收集每个related_id并使用while loop存储到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
}

答案 2 :(得分:0)

你有6行,3有id 1,3有id 2.你指定你想使用这些id作为数组键,所以你最终将得到2个数组,每个数组包含3个值。

如果您希望每个行都在自己的数组中,请执行以下操作:

while($f = $result->fetch_assoc()){
    $item[] = array($f['id'] => $f['related_id']);
  }