使用子索引值组合数组

时间:2017-10-17 08:11:49

标签: php arrays

我有以下数组输出。我想根据税类id组合它们请检查下面的数组和我想要的另一种数组格式是第二个数组

[0] => Array
                (
                    [id] => 1947
                    [cat_id] => 48
                    [tax_class_id] => 18
                    [sku] => 620068-429-S
                    [qty_ordered] => 5
                )

            [1] => Array
                (
                    [id] => 1947
                    [cat_id] => 48
                    [tax_class_id] => 28
                    [sku] => 620068-429-M
                    [qty_ordered] => 9
                )

            [2] => Array
                (
                    [id] => 1947
                    [cat_id] => 48
                    [tax_class_id] => 18
                    [sku] => 620068-429-L
                    [qty_ordered] => 9
                )

            [3] => Array
                (
                    [id] => 1947
                    [cat_id] => 48
                    [tax_class_id] => 28
                    [sku] => 620068-429-XL
                    [qty_ordered] => 9
                )

我想组合那些具有相同tax_class_id的数组,如下所示

[0] => Array(
                        [0] => Array
                        (
                            [id] => 1947
                            [cat_id] => 48
                            [tax_class_id] => 18
                            [sku] => 620068-429-S
                            [qty_ordered] => 5
                        )
                        [1] => Array
                        (
                            [id] => 1947
                            [cat_id] => 48
                            [tax_class_id] => 18
                            [sku] => 620068-429-L
                            [qty_ordered] => 9
                        )

                )
                [1] => Array(

                     [0] => Array
                        (
                            [id] => 1947
                            [cat_id] => 48
                            [tax_class_id] => 28
                            [sku] => 620068-429-M
                            [qty_ordered] => 9
                        )

                    [1] => Array
                        (
                            [id] => 1947
                            [cat_id] => 48
                            [tax_class_id] => 28
                            [sku] => 620068-429-XL
                            [qty_ordered] => 9
                        )
                )

我如何获得上述格式的数组。其中子数组具有相同的tax_class_id。

3 个答案:

答案 0 :(得分:0)

你可以像这样循环:

    $val = [];
    $newArray = []
    foreach ($products as $product) {

      $key = array_search($product['tax_class_id'],$val);
      if(!$key) {
        $val[] = $product['tax_class_id'];
        $key = array_search($product['tax_class_id'],$val);
      }
      $newArray[$key][] = $product;
    }

演示:https://ideone.com/OhRieF#stdin

答案 1 :(得分:0)

您可以组合使用“usort()”并通过循环从生成的usort()数组创建一个新数组。

usort()示例让您入门(基于Sort multi-dimensional array by specific key

<!DOCTYPE html>
<html>
<body>

<?php
$age = array(
    array(
    "id"=>"1", 
    "cat_id"=>"11", 
    "text_id"=>"43"
    ),
    array(
    "id"=>"2", 
    "cat_id"=>"22", 
    "text_id"=>"22"
    ),
    array(
    "id"=>"3", 
    "cat_id"=>"33", 
    "text_id"=>"43"
    ),
    array(
    "id"=>"4", 
    "cat_id"=>"44", 
    "text_id"=>"43"
    ),
    array(
    "id"=>"5", 
    "cat_id"=>"55" ,
    "text_id"=>"22"
    )

);

 function cmp($a, $b)
 {
     return strcmp($a['text_id'], $b['text_id']);
 }

 usort($age, "cmp");

// Just to show that the array has been sorted
echo '<pre>';
print_r($age);
echo '</pre>';

// Create new array using loops here
//......

?>

</body>
</html>

答案 2 :(得分:0)

解....

foreach($array as $row){
    $new[$row['tax_class_id']][] = $row;
}
echo "<pre>";print_r($new);

结果

Array
(
[18] => Array
    (
        [0] => Array
            (
                [id] => 1947
                [cat_id] => 48
                [tax_class_id] => 18
                [sku] => 620068-429-S
                [qty_ordered] => 5
            )

        [1] => Array
            (
                [id] => 1947
                [cat_id] => 48
                [tax_class_id] => 18
                [sku] => 620068-429-L
                [qty_ordered] => 9
            )

    )

[28] => Array
    (
        [0] => Array
            (
                [id] => 1947
                [cat_id] => 48
                [tax_class_id] => 28
                [sku] => 620068-429-M
                [qty_ordered] => 9
            )

        [1] => Array
            (
                [id] => 1947
                [cat_id] => 48
                [tax_class_id] => 28
                [sku] => 620068-429-XL
                [qty_ordered] => 9
            )

    )

)