2017-07-28 120 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, 
     ]); 
    }, 
    [] 
); 

僅供參考,請參閱: