在数组中排序和合并


Sort and merge in a array

我在处理数组PHP时遇到问题,我有一个数组:

[0] {
'email' => 'test@gmail.com',
'meta' => {
          'product' => {
                        'id' => '1',
                        'content' => 'This is content'
                       }
          }
}
[1] {
'email' => 'test2@gmail.com',
'meta' => {
          'product' => {
                        'id' => '2',
                        'content' => 'This is content'
                       }
          }
}
[2] {
'email' => 'test2@gmail.com',
'meta' => {
          'product' => {
                        'id' => '3',
                        'content' => 'This is content'
                       }
          }
}

我需要按值'email'合并这个数组,如下所示:

[0] {
    'email' => 'test@gmail.com',
    'meta' => {
              'product' => {
                            'id' => '1',
                            'content' => 'This is content'
                           }
              }
    }
[1] {
    'email' => 'test2@gmail.com',
    'meta' => {
              'product' => [0] {
                                 'id' => '2',
                                 'content' => 'This is content'
                           }
                           [1] {
                                 'id' => '3',
                                 'content' => 'This is content'
                               }
              }
    }

有人可以帮助我吗?

$sorted_array = [];
$emails = [];
$i = 0;
foreach ($arr as $array) {
    if(!empty($array['email']) && !empty($array['meta']['product'])){
        if( in_array($array['email'], $emails)){
            $i--;
        } else {
            $emails[] = $array['email'];
        }
        $sorted_array[$i]['email'] = $array['email'];
        $sorted_array[$i]['meta']['product'][] = $array['meta']['product'];
        $i++;
    }
}
echo "<pre>";
print_r($sorted_array);

希望这对你有帮助

Php 有许多函数来对数组进行排序。您可以查阅文档以根据您的案例 http://php.net/manual/en/array.sorting.php 选择更好的算法。您可以将结果数组与array_merge函数合并,如下所示:

array_merge($a 1,$a 2)

我在这里为您的代码创建了一个示例:

http://codepad.org/zzkndGQZ

您可以使用

电子邮件像数组的键一样,结束,使用array_combine从0到N个数字...

<?php
$oldArray = array(
    array(
        'email' => 'test@gmail.com',
        'meta' => array(
            'product' => array(
                       'id' => '1',
                        'content' => 'This is content'
            )
        )
    ), array(
        'email' => 'test2@gmail.com',
        'meta' => array(
            'product' => array(
                        'id' => '2',
                        'content' => 'This is content'
            )
        )
    ), array(
        'email' => 'test2@gmail.com',
        'meta' => array(
          'product' => array(
                        'id' => '3',
                        'content' => 'This is content'
            )
        )
    )
);

$newArray = array();
foreach($oldArray as $element){
    if(isset($newArray[$element['email']])) {
        if(!isset($newArray[$element['email']]['meta']['product'][0]))
            $newArray[$element['email']]['meta']['product'] = array($newArray[$element['email']]['meta']['product']);
        $newArray[$element['email']]['meta']['product'][] = $element['meta']['product'];
    } else {
        $newArray[$element['email']] = $element;
    }
}

//For index since 0 to n    
print_r(array_combine(range(0,count($newArray)-1), $newArray));

您可以使用排序的信息构建一个新数组。

它应该使用这样的东西,但未经测试:

$sorted_array = [];
$i = 0;
foreach ($unsorted_array as $array) {
    if(!empty($array['email']) && !empty($array['meta']['product'])){
        $sorted_array[$i]['email'] = $array['email'];
        $sorted_array[$i]['meta']['product'][] = $array['meta']['product'];
        $i++;
    }
}
print_r($sorted_array);