我的数组是这样的:
$data = array(
array('name' => 'john', 'surname' =>'doe', 'car' => 'ford'),
array('name' => 'john', 'surname' =>'doe', 'position' => 'manager'),
array('name' => 'john', 'surname' =>'doe', 'location' => 'LA'),
array('name' => 'michael', 'surname' =>'smith', 'car' => 'toyota'),
array('name' => 'michael', 'surname' =>'smith', 'position' => 'salesman'),
array('name' => 'michael', 'surname' =>'smith', 'location' => 'TX')
);
如何像这个表一样回显这个数组:
name | surname | car | position | location john | doe | ford | manager | LA michael | smith | toyota | salesman | TX
也许我的数据库表可以给出一个想法
人
id |名字|姓
1 |约翰| DOE
2 |迈克尔|史密斯
属性
id | properties_name
1 |车
2 |位置
3 |位置
properties_data
id | person_id | properties_id |值
1 | 1 | 1 |福特
2 | 1 | 2 |经理
3 | 1 | 3 | LA
4 | 2 | 1 |丰田
5 | 2 | 2 |推销员
6 | 2 | 3 | TX
答案 0 :(得分:0)
这仅适用于您的情况:
$newArray = array();
foreach ($data as $innerArray) {
foreach($innerArray as $key => $value) {
if (isset($newArray[$key])) {
if (array_search($value, $newArray[$key]) !== false) {
continue;
}
}
$newArray[$key][] = $value;
}
}
var_dump($newArray);
最好构建正确的SQL查询。
答案 1 :(得分:0)
您可以使用name
和surname
作为索引来规范化数据:
$data = array_reduce(
$data,
function (array $carry, array $item) {
$index = $item['name'] . ' ' . $item['surname'];
return array_merge($carry, [
$index => $item,
]);
},
[]
);
然后回应:
<table>
<tr>
<th>
name
</th>
<th>
surname
</th>
<th>
car
</th>
<th>
position
</th>
<th>
location
</th>
</tr>
<?php foreach ($data as $item): ?>
<tr>
<td>
<?php echo $item['name']; ?>
</td>
<td>
<?php echo $item['surname']; ?>
</td>
<td>
<?php echo $item['car']; ?>
</td>
<td>
<?php echo $item['position']; ?>
</td>
<td>
<?php echo $item['location']; ?>
</td>
</tr>
<?php endforeach; ?>
</table>
但是,这可能存在风险,因为您可能拥有姓名相同的人,然后您最终会将他们的数据合并为一行。
由于您的persons
表格有标识符,因此最好调整您的查询以便从中选择id
,然后将其用作关键字:
$data = array_reduce(
$data,
function (array $carry, array $item) {
$index = $item['id'](
return array_merge($carry, [
$index => $item,
]);
},
[]
);
供参考,见: