2014-03-12 48 views
0

我有這樣PHP - 凝聚arrray通過ID

id  color 
102  blue 
102  red 
102  pink 
114  green 
114  red 
114  yellow 
114  gray 
118  white 
118  blue 

數據,我想通過ID結塊顏色..我想結果是這樣的:

Array 
(
    [0] => Array 
     (
      [0] => blue 
      [1] => red 
      [2] => pink 
     ) 

    [1] => Array 
     (
      [0] => green 
      [1] => red 
      [2] => yellow 
      [3] => gray 
     ) 

    [2] => Array 
     (
      [0] => white 
      [1] => blue 
     ) 

) 

我怎麼讓它..我「M還是新手,我是有點混亂,使其

回答

1

你可以這樣做:

unset($array); 
$array = array(
0 => array("id"=>102,"color"=>"blue"), 
1 => array("id"=>102,"color"=>"red"), 
2 => array("id"=>102,"color"=>"pink"), 
3 => array("id"=>114,"color"=>"green"), 
4 => array("id"=>114,"color"=>"red"), 
5 => array("id"=>114,"color"=>"yellow"), 
6 => array("id"=>114,"color"=>"gray"), 
7 => array("id"=>118,"color"=>"white"), 
8 => array("id"=>118,"color"=>"blue") 
); 

unset($output); 
if (is_array($array) && count($array) > 0) { 
    foreach ($array as $value) { 
     $output[$value["id"]][] = $value["color"]; 
    } 
} 
//[EDIT] ADD this: 
$output=array_values($output); 
+0

他不會得到完全相同的輸出。數組$輸出的索引將是102,114,118等,這不是所需的輸出 – anurupr

+0

我更新代碼 – jftremblay

+0

其中您的索引數組聲明?在任何情況下,你可以參考我的答案任何幫助 – anurupr

0

保存就像給出的例子,只需在你的數組中提供上述輸出的array_values函數。

$color[102]=array('blue','red','pink'); 
$color[114]=array('green','red','yellow','gray'); 
$color[118]=array('white','blue'); 
$color=array_values($color); 
echo '<pre>'; 
print_r($color); 
0

要jfremblay解決方案,您可以添加兩個字符串的結束和輸出數組是準確的相同:

ksort($output); 
$output = array_values($output); 

或本:

ksort($output); 
$output = array_values($output); 

和最終的代碼是:

$colorArray = array(
    array('id' => 102, 'color' => 'blue'), 
    array('id' => 102, 'color' => 'red'), 
    array('id' => 102, 'color' => 'pink'), 
    array('id' => 114, 'color' => 'green'), 
    array('id' => 114, 'color' => 'red'), 
    array('id' => 114, 'color' => 'yellow'), 
    array('id' => 114, 'color' => 'gray'), 
    array('id' => 118, 'color' => 'white'), 
    array('id' => 118, 'color' => 'blue') 
); 

$output = array(); 
if (is_array($colorArray) && count($colorArray) > 0) { 
    foreach ($colorArray as $value) { 
     $output[$value["id"]][] = $value["color"]; 
    } 
} 

ksort($output); 
$output = array_values($output); 
var_dump($output); 
+0

謝謝@evgeny – Faisal

0

此代碼我S添加到您問題的解決方案:

$colors = array(); 

$colors[] = array("id" => 102, "color" => "blue"); 
$colors[] = array("id" => 102, "color" => "red"); 
$colors[] = array("id" => 102, "color" => "pink"); 
$colors[] = array("id" => 114, "color" => "green"); 
$colors[] = array("id" => 114, "color" => "red"); 
$colors[] = array("id" => 114, "color" => "yellow"); 
$colors[] = array("id" => 118, "color" => "gray"); 
$colors[] = array("id" => 118, "color" => "white"); 
$colors[] = array("id" => 118, "color" => "blue"); 

$lastId = null; 
$temp = array(); 
$arrays = array(); 
foreach ($colors as $color) { 
    if ($lastId != $color['id'] && $lastId != null) { 
     $arrays[] = $temp; 
     $temp = array(); 
    } 
    $lastId = $color['id']; 
    $temp[] = $color['color']; 
} 

$arrays[] = $temp; 

echo '<pre>'; 
print_r($arrays); 
echo '</pre>'; 

這段代碼的輸出是(截圖):

Output screenshot

希望這有助於:-)

+0

謝謝@ponciste – Faisal