我有这张桌子:
| 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;
}
答案 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']);
}