php组数组一起基于键值相同

时间:2014-11-19 18:31:19

标签: php arrays sorting

我有以下数组

Array
(
[0] => Array
    (
        [id_product_option] => 1
        [id_option] => 1
        [id_product] => 3
        [option_value] => White
        [option_name] => color

    )

[1] => Array
    (
        [id_product_option] => 2
        [id_option] => 2
        [id_product] => 3
        [option_value] => 9oz
        [option_name] => size

    )

[2] => Array
    (
        [id_product_option] => 3
        [id_option] => 1
        [id_product] => 3
        [option_value] => Blue
        [option_name] => color

    )

)

我需要做的是遍历它并找到id_option值匹配的那些并将它们分组到一个看起来像

的新数组中
Array
(
[0] => Array
    [0] => Array
        (
            [id_product_option] => 1
            [id_option] => 1
            [id_product] => 3
            [option_value] => White
            [additional_cost] => 0
            [is_active] => 1
            [created_on] => 2014-11-15 01:29:35
            [option_name] => color
            [option_text] => Color
        )

    [1] => Array
        (
            [id_product_option] => 3
            [id_option] => 1
            [id_product] => 3
            [option_value] => Blue
            [additional_cost] => 0
            [is_active] => 1
            [created_on] => 2014-11-15 01:29:35
            [option_name] => color
            [option_text] => Color
        )

[1] => Array
    (
        [id_product_option] => 2
        [id_option] => 2
        [id_product] => 3
        [option_value] => 9oz
        [additional_cost] => 0
        [is_active] => 1
        [created_on] => 2014-11-15 01:29:35
        [option_name] => size
        [option_text] => Size
    )


)

将id_option 1的选项组合在一起

我试过以下但没有运气

    $groupOptions = array();
    $prev = "";
    foreach($productOptions as $key=>$options) {
        $id_option = $options['id_option'];

        if($id_option != $prev) {
            $groupOptions[] = $productOptions[$key];
        }

        $prev = $id_option;
    }

2 个答案:

答案 0 :(得分:1)

您应该使用该id_option作为新数组中的键,否则您将不得不寻找新数组以查找匹配项目的位置,这是您在第一个循环中所做的事情

$newarray = array();
foreach($oldarray as $item) {
   $newarray[$item['id_option']][] = $item;
}

答案 1 :(得分:0)

我已经测试了你的例子,似乎工作正常:

$notFactored; # you should provide here your input array
$factored = array();
foreach($notFactored as $nf) {
    $found = FALSE;
    foreach($factored as &$f) { # passed by address !
        if(!empty($f[0]) && $nf['id_option'] == $f[0]['id_option']) {
            $f[] = $nf;
            $found = TRUE;
            break;
        }
    }
    if(!$found) {
        $factored[count($factored)][] = $nf;
    }
}
print 'my factored array : ' . print_r($factored);

希望有助于:)