
[英]PHP Array fill with Default Values, if NULL. Array Intersect Trick?
[英]PHP array trick
我想建立一个特定的数组
我从MySQL查询中获得这些数组
$result = $db->prepare($sql);
$result->execute(array());
foreach($result as $row)
{
$test[$i]['case'] = $row[0];
$test[$i]['name'] = $row[1];
$test[$i]['task'] = $row[2];
$test[$i]['current'] = $row[3];
}
回声var_dump($ test)
array (size=32)
0 =>
array (size=4)
'case' => string '174' (length=3)
'name' => string 'Bone Tumor' (length=10)
'task' => string '201006' (length=6)
'current' => string '0' (length=1)
1 =>
array (size=4)
'case' => string '174' (length=3)
'name' => string 'Bone Tumor' (length=10)
'task' => string '207001' (length=6)
'current' => string '0' (length=1)
2 =>
array (size=4)
'case' => string '174' (length=3)
'name' => string 'Bone Tumor' (length=10)
'task' => string '205003' (length=6)
'current' => string '0' (length=1)
3 =>
array (size=4)
'case' => string '174' (length=3)
'name' => string 'Bone Tumor' (length=10)
'task' => string '209002' (length=6)
'current' => string '1' (length=1)
我想重新组合案例和名称(始终为4)并完成此操作
array ()
0 =>
array ()
'case' => string '174' (length=3)
'name' => string 'Bone Tumor' (length=10)
array ()
'task1' => string '201006' (length=6)
't1_current' => string '0' (length=1)
'task2' => string '207001' (length=6)
't2_current' => string '0' (length=1)
'task3' => string '205003' (length=6)
't3_current' => string '0' (length=1)
'task4' => string '209002' (length=6)
't4_current' => string '1' (length=1)
1 =>
array ()
'case' => string '182' (length=3)
'name' => string 'Cranioplasty' (length=10)
array ()
'task1' => string '201006' (length=6)
't1_current' => string '0' (length=1)
'task2' => string '207001' (length=6)
't2_current' => string '0' (length=1)
'task3' => string '205003' (length=6)
't3_current' => string '0' (length=1)
'task4' => string '209002' (length=6)
't4_current' => string '1' (length=1)
我应该更改直接从SQL获取查询的初始方式吗?
有两种选择。
首次使用循环
foreach($result as $row)
{
// skip duplicates
$flag = false;
foreach($test as $row1)
{
if($row[0] == $row1['case'])
{
$flag = true;
break;
}
}
if($flag)
continue;
$test[$i]['case'] = $row[0];
$test[$i]['name'] = $row[1];
// Fill tasks
$test[$i]['tasks'] = array();
foreach($result as $row1)
{
if($test[$i]['case'] == $row1[0])
{
$test[$i]['tasks'][] = array('task' => $row1[2], 'current' => $row1[3]);
}
}
}
第二种选择是执行SQL查询以获取所有案例的列表。 然后针对每种情况执行查询以获取所有关联的任务。 假设你有一个列的表案例
id | case | name | task | current
这是代码的样子
$sql = 'SELECT c.case, c.name FROM Cases c GROUP BY c.case;';
$result = $db->prepare($sql);
$result->execute(array());
foreach($result as $row)
{
$sql = 'SELECT c.task, c.current FROM Cases c WHERE c.case = '.$row[0].';';
$tasks = $db->prepare($sql);
$tasks->execute(array());
$test[] = array('case' => $row[0],
'name' => $row[1],
'tasks' => $tasks);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.