PHP-按id聚合arrray

PHP-按id聚合arrray,php,arrays,Php,Arrays,我有这样的数据 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] =>

我有这样的数据

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
        )

)
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);
我是怎么做到的。。我还是个新手,我有点困惑,你可以这样做:

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
        )

)
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);

像给定的示例一样保存,只需在提供上述输出的数组中使用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);
$color[102]=数组('blue','red','pink');
$color[114]=数组(“绿色”、“红色”、“黄色”、“灰色”);
$color[118]=数组('white','blue');
$color=数组值($color);
回声';
打印(彩色);

对于jfremblay解决方案,您可以在末尾添加两个字符串,输出数组将完全相同:

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);
最后的代码是:

$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>';

此代码是您问题的解决方案:

$colors=array();
$colors[]=数组(“id”=>102,“color”=>“蓝色”);
$colors[]=数组(“id”=>102,“color”=>red”);
$colors[]=数组(“id”=>102,“color”=>粉色”);
$colors[]=数组(“id”=>114,“color”=>绿色”);
$colors[]=数组(“id”=>114,“color”=>red”);
$colors[]=数组(“id”=>114,“color”=>“黄色”);
$colors[]=数组(“id”=>118,“color”=>gray”);
$colors[]=数组(“id”=>118,“color”=>白色”);
$colors[]=数组(“id”=>118,“color”=>“蓝色”);
$lastId=null;
$temp=array();
$arrays=array();
foreach($colors作为$color){
如果($lastId!=$color['id']&&$lastId!=null){
$arrays[]=$temp;
$temp=array();
}
$lastId=$color['id'];
$temp[]=$color['color'];
}
$arrays[]=$temp;
回声';
打印(数组);
回声';
此代码的输出为(屏幕截图):


希望这有帮助:-)

他不会得到完全相同的输出。数组$output的索引将是102114118,等等,这不是所需的输出。您的索引数组声明在哪里?在任何情况下,你都可以参考我的答案寻求帮助,非常好。更高效。我希望它能满足用户的需求。:-)