Php-将单个数组的行与相同的值组合在一起

Php-将单个数组的行与相同的值组合在一起,php,arrays,Php,Arrays,基本上我有这个阵列: $foo[0] = array("name" => "A", "apples" => "2"); $foo[1] = array("name" => "B", "apples" => "4"); $foo[2] = array("name" => "C", "apples" => "6"); $foo[3] = array("name" => "A", "apples" => "3"); $foo[4] = array("na

基本上我有这个阵列:

$foo[0] = array("name" => "A", "apples" => "2");
$foo[1] = array("name" => "B", "apples" => "4");
$foo[2] = array("name" => "C", "apples" => "6");
$foo[3] = array("name" => "A", "apples" => "3");
$foo[4] = array("name" => "B", "apples" => "5");
$foo[5] = array("name" => "C", "apples" => "7");
我想要这个:

$foo[0] = array("name" => "A", "apple1" => "2", "apple2" => "3");
$foo[1] = array("name" => "B", "apple1" => "4", "apple2" => "5");
$foo[2] = array("name" => "C", "apple1" => "6", "apple2" => "7");
您可以执行经典的
foreach
循环:

$foo[0] = array("name" => "A", "apples" => "2");
$foo[1] = array("name" => "B", "apples" => "4");
$foo[2] = array("name" => "C", "apples" => "6");
$foo[3] = array("name" => "A", "apples" => "3");
$foo[4] = array("name" => "B", "apples" => "5");
$foo[5] = array("name" => "C", "apples" => "7");

$result = array();
foreach( $foo as $value ) {
    if ( !isset( $result[ $value[ "name" ] ] ) ) {
        $result[ $value[ "name" ] ] = array();
        $result[ $value[ "name" ] ][ "name" ] = $value[ "name" ];
        $result[ $value[ "name" ] ][ "apple1" ] = $value[ "apples" ];
    } else {
        $cnt = count( $result[ $value[ "name" ] ] );
        $result[ $value[ "name" ] ][ "apple" . $cnt ] = $value[ "apples" ];
    }
}

//returns all the values from the array and indexes the array numerically.
$result = array_values( $result );

echo "<pre>";
print_r( $result );
echo "</pre>";

只要您使用数组,就可以使用数组而不是数字字符串,如:

foreach($foo as $v) {
    $result[$v['name']]['name'] = $v['name'];
    $result[$v['name']]['apples'][] = $v['apples'];
}
通过
name
值循环并索引结果,并将
apples
值动态附加到
apples
数组中:

$result = array_values($result);
然后,如果需要重新编制索引:


这些结果是否来自数据库

如果是这样的话,您可能可以在一行中使用一些PDO常量组合来实现这一点:

我会看看
PDO::FETCH_UNIQUE
PDO::FETCH_GROUP
,它们也可以像这样组合
PDO::FETCH_UNIQUE | PDO::FETCH_GROUP


如果不是这样,那么查询本身也可以通过
groupby

生成此信息。好吧,什么让您保持?将更有意义,比如:
$foo[0]=array(“name”=>“A”,“apples”=>array(“2”,“3”)到目前为止,您是如何实现yoar目标的?我无法编写一个函数来转换另一个数组中的一个数组,我尝试了嵌套foreach。。。乌斯波特。。。快发疯了非常感谢你,埃迪!是的,此数组是三个查询的脏并集的结果。。。谢谢你的建议,事实上我在一个非常基本的层面上使用php/mysql,我需要尽快交付这个项目。稍后我将花时间探索更优雅的解决方案!
foreach($foo as $v) {
    $result[$v['name']]['name'] = $v['name'];
    $result[$v['name']]['apples'][] = $v['apples'];
}
$result = array_values($result);