2014-01-27 34 views
0

陣列(如何在php中用相同的id連接這個數組?

[0]=>array(
    [id]=>1 
    [name]=>aaa 
    [address]=>AAA 
) 
[1]=>array(
    [id]=>1 
    [name]=>bbb 
    [address]=>BBB 
) 
[2]=>array(
    [id]=>2 
    [name]=>ccc 
    [address]=>CCC 
) 
[3]=>array(
    [id]=>2 
    [name]=>ddd 
    [address]=>DDD 
) 
[4]=>array(
    [id]=>3 
    [name]=>eee 
    [address]=>EEE 
) 

這是從數據庫中選擇的標準陣列。 我想這樣的輸出中:

陣列(

[0]=>array(
    [id]=>1 
    [dataArray] => array(
     [0]=>array(
      [name]=>aaa 
      [address]=>AAA 
     ) 
     [1]=>array(
      [name]=>bbb 
      [address]=>BBB 
     ) 
    ) 
) 
[1]=>array(
    [id]=>2 
    [dataArray] => array(
     [0]=>array(
      [name]=>ccc 
      [address]=>CCC 
     ) 
     [1]=>array(
      [name]=>ddd 
      [address]=>DDD 
     ) 
    ) 
) 
[2]=>array(
    [id]=>3 
    [dataArray] => array(
     [0]=>array(
      [name]=>eee 
      [address]=>EEE 
     ) 
    ) 
) 

我如何在PHP中實現這一目標?請幫忙。我嘗試了in_array和array_key_exists來檢查現有的ID,但我無法做到。

回答

1

看看這個工程爲雅。

$results = array(); 

//loop through your array 
foreach($yourArray as $row => $field) { 

    //check if "id" is already set and store the index value it exist within 
    $existing_index = NULL; 
    foreach($results as $result_row => $result_field) { 
    if ($result_field['id'] == $field['id']) { 
     $existing_index = $result_row; 
     break; 
    } 
    } 

    if (isset($existing_index)) { 
    //the "id" already exist, so add to the existing id 
    $dataArrayIndex = count($results[$existing_index]['dataArray']); 
    $results[$existing_index]['dataArray'][$dataArrayIndex]['name'] = $field['name']; 
    $results[$existing_index]['dataArray'][$dataArrayIndex]['address'] = $field['address']; 
    } 
    else { 
    //the "id" does not exist, create it 
    $results_index = count($results); 
    $results[$results_index]['id'] = $field['id']; 
    $results[$results_index]['dataArray'][0]['name'] = $field['name']; 
    $results[$results_index]['dataArray'][0]['address'] = $field['address']; 
    } 
} 
+0

Cheers mate。這樣可行! – lth159856

0

迭代數組並分配值一個新的變量:

$newArray = array(); 
foreach ($yourArray as $v) { 
    if (!isset($newArray[$v['id']])) { 
     $newArray[$v['id']] = array('id' => $v['id'], 'dataArray' => array()); 
    } 
    $newArray[$v['id']]['dataArray'][] = array('name' => $v['name'], 'address' => $v['address']); 
} 
print_r($newArray); 

見PHP手冊@http://us1.php.net/manual/en/control-structures.foreach.php

+0

非常接近。但$ newArray [$ v ['id']] ['dataArray'] []似乎不起作用。因爲具有相同id的第二個dataArray將覆蓋最後一個dataArray。所以輸出dataArray將只顯示1個數組。像這樣[0] => array([name] => bbb,[address] => BBB)id = 1,id = 2。 – lth159856

相關問題