2014-03-12 49 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