如何使用 PHP 从按其中某个值分组的多维数组中提取值?

问题描述 投票:0回答:4

我有一个看起来像这样的数组:-

Array ( 
 [0] => Array ( [id] => 10 [group] => 11 ) 
 [1] => Array ( [id] => 11 [group] => 13 )
 [2] => Array ( [id] => 12 [group] => 13 ) 
 [3] => Array ( [id] => 13 [group] => 13 ) 
 [4] => Array ( [id] => 14 [group] => 16 ) 
 [5] => Array ( [id] => 15 [group] => 16 ) 
 [6] => Array ( [id] => 16 [group] => 16 )  
)

对于这个数组中的每个不同组,我想创建存储 id 的数组。 在我的例子中,我有 3 个组,所以我想得到 3 个这样的数组:

Array ( [0] => 10)

Array ( [0] => 11
        [1] => 12
        [2] => 13)

Array ( [0] => 14
        [1] => 15
        [2] => 16)

如果可以的话我该怎么办?

php arrays multidimensional-array
4个回答
1
投票

这应该可以帮助您入门。 https://iconoun.com/demo/temp_icold.php

<?php // demo/temp_icold.php
/**
 * Manipulate multi-dimensional arrays
 *
 * https://stackoverflow.com/questions/45422046/how-to-extract-values-from-multidimensional-array-grouped-by-some-value-inside-i
 */
error_reporting(E_ALL);
echo '<pre>';


$original = Array (
 '0' => Array ( 'id' => 10, 'group' => 11 ),
 '1' => Array ( 'id' => 11, 'group' => 13 ),
 '2' => Array ( 'id' => 12, 'group' => 13 ),
 '3' => Array ( 'id' => 13, 'group' => 13 ),
 '4' => Array ( 'id' => 14, 'group' => 16 ),
 '5' => Array ( 'id' => 15, 'group' => 16 ),
 '6' => Array ( 'id' => 16, 'group' => 16 ),
);

print_r($original);

foreach ($original as $arr)
{
   $ndx = 'group' . $arr['group'];
   $out[$ndx][] = $arr['id'];
}

print_r($out);

1
投票

您可以通过许多不同的方法来实现这一点,但最简单的可能是 foreach() 循环。在下面的示例中,我循环遍历

$a
(您的示例数组)并构建一个名为
$grouped
的新数组,其中索引作为
group
属性值。

在我的示例中,我没有复制

$group
内的 ID。如果您想要重复项,可以删除第二个
if
语句。

$a = [ 
    ['id' => 10, 'group' => 11],
    ['id' => 11, 'group' => 13],
    ['id' => 12, 'group' => 13],
    ['id' => 13, 'group' => 13],
    ['id' => 14, 'group' => 16],
    ['id' => 15, 'group' => 16],
    ['id' => 16, 'group' => 16],
];

$grouped = [];
foreach ($a as $entry) {
    if (! array_key_exists($entry['group'], $grouped)) {
        $grouped[$entry['group']] = [];
    }
    if (! in_array($entry['id'], $grouped[$entry['group']])) {
        $grouped[$entry['group']][] = $entry['id'];
    }
}

var_dump($grouped);

该示例输出以下内容:

array(3) {
  [11]=>
  array(1) {
    [0]=>
    int(10)
  }
  [13]=>
  array(3) {
    [0]=>
    int(11)
    [1]=>
    int(12)
    [2]=>
    int(13)
  }
  [16]=>
  array(3) {
    [0]=>
    int(14)
    [1]=>
    int(15)
    [2]=>
    int(16)
  }
}

1
投票
$result_array = array();
foreach($array_name as $sub_array){
    $result_array[$sub_array['group']][] = $sub_array['id'];
}

这将循环您的输入数组并创建一个由组值索引的结果二维数组。要提取组结果,只需为组索引:

$result_array['GROUP_NUMBER'];


1
投票

这是我对此的看法:

<?php

    $arr = array(
        array("id"=>10,"group"=>11),
        array("id"=>11,"group"=>13),
        array("id"=>12,"group"=>13),
        array("id"=>13,"group"=>13),
        array("id"=>14,"group"=>16),
        array("id"=>15,"group"=>16),
        array("id"=>16,"group"=>16)
    );

    echo "<pre>".print_r(groupsToArrays($arr),true)."</pre>";

    function groupsToArrays($arr, $groupkey = "group") {
        $main = array();
        $group = 0;
        $arr[] = array("id"=>"end", $groupkey => "0");
        foreach($arr as $key => $value) {
            if($group != $value[$groupkey]) {
                if($key != 0) $main[$group] = $tempArray;
                if($value['id'] == "end") continue;
                $group = $value[$groupkey];
                $tempArray = array();
            }
            $tempArray[] = $value;
        }
        return $main;
    }

此函数将循环遍历您的数组并检查

$groupkey
键,并将每个匹配项添加到它自己的数组中。

这是回报:

Array
(
    [11] => Array
        (
            [0] => Array
                (
                    [id] => 10
                    [group] => 11
                )

        )

    [13] => Array
        (
            [0] => Array
                (
                    [id] => 11
                    [group] => 13
                )

            [1] => Array
                (
                    [id] => 12
                    [group] => 13
                )

            [2] => Array
                (
                    [id] => 13
                    [group] => 13
                )

        )

    [16] => Array
        (
            [0] => Array
                (
                    [id] => 14
                    [group] => 16
                )

            [1] => Array
                (
                    [id] => 15
                    [group] => 16
                )

            [2] => Array
                (
                    [id] => 16
                    [group] => 16
                )

        )

)

现在您可以通过执行以下操作来访问该组数组:

$groups = groupsToArrays($arr);
print_r($groups[$groupID]);
© www.soinside.com 2019 - 2024. All rights reserved.