2017-07-28 75 views
-2

我的数组是这样的:怎样的foreach这个多维数组

$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

为什么你的数组是这样的?你试过什么了? – Luca

+0

为什么'john doe'分裂成3个数组?这是从哪里来的?你有什么尝试?如果你有2个'john doe',这个格式将永远不会工作。 – chris85

+0

你想把这个数组保存在数据库表中吗?或者您可以编写适当的SQL查询来表示您的值! – Maris

回答

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查询。

+0

感谢您的回答。这对我很有用。另外我会检查SQL查询。 –

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

仅供参考,请参阅: