Php 如何过滤关联数组?
我必须处理重构,减少PHP中的代码行数,过滤关联数组。 所以我在MySQL中从DB中进行选择,以获得一个关联数组。所以我的“对象”有一个类别和一个姓氏字段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
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]
包含类别:)