如何预测这个多维数组

时间:2017-07-28 12:21:43

标签: php mysql multidimensional-array

我的数组是这样的:

$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

2 个答案:

答案 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)

您可以使用namesurname作为索引来规范化数据:

$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,
        ]);
    },
    []
);

供参考,见: