Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何过滤关联数组?_Php_Arrays_Associative Array - Fatal编程技术网

Php 如何过滤关联数组?

Php 如何过滤关联数组?,php,arrays,associative-array,Php,Arrays,Associative Array,我必须处理重构,减少PHP中的代码行数,过滤关联数组。 所以我在MySQL中从DB中进行选择,以获得一个关联数组。所以我的“对象”有一个类别和一个姓氏字段 while ($row = mysqli_fetch_array($result)) { $array[] = $row['category']; $array[] = $row['Surname']; } 我想从这个数组中获得,和其他子数组一样,按类别划分。我的意思是,类别数组标识可能是: $cate

我必须处理重构,减少PHP中的代码行数,过滤关联数组。 所以我在MySQL中从DB中进行选择,以获得一个关联数组。所以我的“对象”有一个类别和一个姓氏字段

while ($row = mysqli_fetch_array($result)) {
        $array[] = $row['category'];
        $array[] = $row['Surname'];
   }
我想从这个数组中获得,和其他子数组一样,按类别划分。我的意思是,类别数组标识可能是:

$categories = array("A","B","C","D");
所以我想要的是,为每个类别获得一个数组,其中包含该类别的所有姓氏。 因此,假设该方法有效,如下所示:

$arrayFiltered = method_filter($array_asso,"A");
    foreach ($categories as &$value) {
       $arrayFiltered = method_filter($array_asso,$value);
       my_method_which_needs_the_filtered_array($arrayFiltered);
}
最后我想要这样的东西:

$arrayFiltered = method_filter($array_asso,"A");
    foreach ($categories as &$value) {
       $arrayFiltered = method_filter($array_asso,$value);
       my_method_which_needs_the_filtered_array($arrayFiltered);
}

提前感谢您的帮助。

据我所知,您需要一个数组,其中包含所有
姓氏
类别
智能,以便您可以轻松访问它们。这应有助于:

while ($row = mysqli_fetch_array($result)) {
    $categories[$row['category']][] = $row['Surname'];
}

只需将类别存储为
,将所有
姓氏
存储为
的值,中士的方法最简单。为了方便起见,这里提供了一种方法(以防您也需要一个未过滤的数组):

以下是无需数据库连接的概念证明:

$categories = array("A","B","C","D");

$array = [
    ['category' => 'A', 'Surname' => 'A Name 1'],
    ['category' => 'A', 'Surname' => 'A Name 2'],
    ['category' => 'B', 'Surname' => 'B Name 1'],
    ['category' => 'B', 'Surname' => 'B Name 2'],
    ['category' => 'B', 'Surname' => 'B Name 3'],
    ['category' => 'C', 'Surname' => 'C Name'],
];

$categorized = [];

foreach ($categories as $category) {
    $categorized[$category] = array_filter($array, function($item) use ($category) {
        return $item['category'] == $category;
    });
}

print_r($categorized);
输出:

Array
(
    [A] => Array
        (
            [0] => Array
                (
                    [category] => A
                    [Surname] => A Name 1
                )

            [1] => Array
                (
                    [category] => A
                    [Surname] => A Name 2
                )

        )

    [B] => Array
        (
            [2] => Array
                (
                    [category] => B
                    [Surname] => B Name 1
                )

            [3] => Array
                (
                    [category] => B
                    [Surname] => B Name 2
                )

            [4] => Array
                (
                    [category] => B
                    [Surname] => B Name 3
                )

        )

    [C] => Array
        (
            [5] => Array
                (
                    [category] => C
                    [Surname] => C Name
                )

        )

    [D] => Array
        (
        )

)

您需要在DB中使用适当的规范化表结构!!这种方法(每个记录以逗号分隔的值存储数据)会给您带来很多麻烦。DB有一个表,它是:Category,姓氏as field。现在,我正在为每个类别创建一个查询,但这会增加一些延迟,代码可能会有所改进。因此,代码的最后一部分应该是:foreach($categories as&$value){my_method_哪个需要_filtered_数组($categories[$value])}不是吗?如果
$categories[$value]
包含类别:)