2012-04-07 124 views
0

數組從數據庫加載,它看起來像這樣:PHP數組操作,以減少冗餘

array=>(
    0=>array(
    'id'=>1, 
    'user'=>'eric', 
    'text'=>'hello' 
), 
    1=>array(
    'id'=>1, 
    'user'=>'eric', 
    'text'=>'how are you?' 
), 
    2=>array(
    'id'=>2, 
    'user'=>'john', 
    'text'=>'nice to meet you' 
), 
    ...... 
) 

,你可以看到,該陣列中的唯一區別是「文本」字段,所以我想再拍陣列以減少冗餘,這樣的事情:

array=>(
    0=>array(
    'id'=>1, 
    'user'=>'eric', 
    'text'=>array(
     0=>'hello', 
     1=>'how are you?' 
    ) 
), 
    1=>array(
    'id'=>2, 
    'user'=>'john', 
    'text'=>array(
     0=>'nice to meet you', 
    ) 
), 
...... 
) 

我是一個新的編程,我已經花了幾個小時試圖數字出來,但我不能。我怎麼能做到這一點?請幫忙。

+0

你可以只用一個循環來完成 – safarov 2012-04-07 11:46:47

+1

你想要做什麼的具體原因是什麼?我能想到的大多數理由(速度,效率等)似乎都不是想要做到這一點的充分理由,如果您需要這種結構來完成某件事情,從數據庫中檢索它會不會更聰明? – Nanne 2012-04-07 11:49:23

+0

原因是儘量避免冗餘,因爲您可以看到ID字段是多餘的。但是,正如你所建議的那樣,從數據庫中檢索它會很好,但是怎麼樣?你能告訴我示例代碼,我正在使用mysql。 – webberpuma 2012-04-07 11:56:15

回答

1

代碼:

<?php 
    $newarray = array(); 

    foreach ($array as $item) 
    { 
      if (!isset($newarray[$item['id']])) $newarray[$item['id']] = array(); 

      $newarray[$item['id']][] = $item['text']; 
    } 
?> 

這將創造一些這樣的事:

array (
    1 => array ("hello", "how are you?"), 
    2 => array ("a","b"), 
    ... 
) 

// where the array keys (1,2,...) will be the IDs 
1

鍵名將id

$new_array = array(); 
foreach($old_array as $value) { 
    $new_array[$value['id']]['text'][] = $value['text']; 
} 
print_r($new_array); 
0

爲了使它更加緊湊,這個怎麼樣:

$new_array = array(); 
foreach ($old_array as $item) { 
    $id = $item['id']; 
    if (empty($new_array[$id]) || !in_array($item['text'], $new_array[$id])) { 
     $new_array[$id][] = $item['text']; 
    } 
} 

這將減少給定ID的重複文本。