在 PHP 中过滤数组
-
在 PHP 中使用
array_intersect_keys
和array_flip
过滤数组 -
在 PHP 中使用
array_filter
和ARRAY_FILTER_USE_KEY
过滤数组 -
在 PHP 中使用
array_filter
和ARRAY_FILTER_USE_BOTH
过滤数组 - PHP 中基于键长度过滤数组
本教程将教授你可用于在 PHP 中过滤数组的不同方法。这些方法将使用内置的 PHP 函数,如 array_intersect_key
、array_flip
、array_filter
和 array_keys
。
在 PHP 中使用 array_intersect_keys
和 array_flip
过滤数组
array_intersect_keys
是一个 PHP 内置函数,它使用键来计算数组的交集。它接受两个数组作为参数
。
第一个数组应该是一个带有主键的数组。而第二个数组应该包含你将与之比较的键。
array_flip
是一个内置的 PHP 函数。它将所有键与它们在数组中的关联值交换。
结合这两者,你可以过滤数组。首先,你创建一个包含主键的数组。
第二个数组将包含你要检查的键。以下代码块显示了如何使用 array_intersect_keys
和 array_flip
过滤数组。
样本:
<?php
$array_master = array (
"author_name" => "John",
"discipline" => "Computer Science",
"Date_of_Birth" => "01/01/1970",
"Programming Languages" => "PHP, Objective-C"
);
$allowed_keys = array(
"author_name",
"discipline"
);
echo "<pre>";
var_dump(array_intersect_key($array_master, array_flip($allowed_keys)));
echo "</pre>";
?>
输出:
array(2) {
["author_name"]=>
string(4) "John"
["discipline"]=>
string(16) "Computer Science"
}
在 PHP 中使用 array_filter
和 ARRAY_FILTER_USE_KEY
过滤数组
array_filter
是另一个内置函数。它使用回调函数来过滤数组的元素。
array_filter
函数接受类似 ARRAY_FILTER_USE_KEY
的标志。此标志将允许你通过其键过滤数组。
下面的代码块将提供有关如何将 array_filter()
与 ARRAY_FILTER_USE_KEY
一起使用的详细信息。
样本:
<?php
$array_master = array (
"author_name" => "John",
"discipline" => "Computer Science",
"Date_of_Birth" => "01/01/1970",
"Programming Languages" => "PHP, Objective-C"
);
$allowed_keys = array(
"author_name",
"discipline"
);
$filtered = array_filter(
$array_master,
function ($key) use ($allowed_keys) {
return in_array($key, $allowed_keys);
},
ARRAY_FILTER_USE_KEY
);
echo "<pre>";
echo var_dump($filtered);
echo "</pre>";
?>
输出:
array(2) {
["author_name"]=>
string(4) "John"
["discipline"]=>
string(16) "Computer Science"
}
从 PHP 7.4 开始,你可以使用箭头函数重写之前的代码:
<?php
$array_master = array (
"author_name" => "John",
"discipline" => "Computer Science",
"Date_of_Birth" => "01/01/1970",
"Programming Languages" => "PHP, Objective-C"
);
$allowed_keys = array(
"author_name",
"discipline"
);
// Here we are using an arrow
// function in array_filter
$filtered = array_filter(
$array_master,
fn ($key) => in_array($key, $allowed_keys),
ARRAY_FILTER_USE_KEY
);
echo "<pre>";
echo var_dump($filtered);
echo "</pre>";
输出:
array(2) {
["author_name"]=>
string(4) "John"
["discipline"]=>
string(16) "Computer Science"
}
在 PHP 中使用 array_filter
和 ARRAY_FILTER_USE_BOTH
过滤数组
ARRAY_FILTER_USE_BOTH
是一个可以与 array_filter()
函数一起使用的标志。有了它,你可以将值和键传递给你的 callback
函数。
这种方法的优点之一是能够针对键执行任意测试
。
下一个代码块展示了如何使用 ARRAY_FILTER_USE_BOTH
和 array_filter()
。
样本:
<?php
$array_master = array (
"author_name" => "John",
"discipline" => "Computer Science",
"Date_of_Birth" => "01/01/1970",
"Programming Languages" => "PHP, Objective-C"
);
$allowed_keys = array(
"author_name" => true,
"discipline" => true
);
$filtered = array_filter(
$array_master,
fn ($val, $key) => isset($allowed_keys[$key]) && ($allowed_keys[$key] === true || $allowed_keys[$key] === $val) ,
ARRAY_FILTER_USE_BOTH
);
echo "<pre>";
echo var_dump($filtered);
echo "</pre>";
?>
输出:
array(2) {
["author_name"]=>
string(4) "John"
["discipline"]=>
string(16) "Computer Science"
}
PHP 中基于键长度过滤数组
你可以根据其键长度过滤数组。你可以使用这些 PHP 内置函数 array_filter
、array_keys
、array_intersect_key
、array_flip
和 strlen
来做到这一点。
你要过滤的数组应在字符串中定义其键。此外,每个字符串应至少包含三个字符长。
作为第一步,使用 array_filter()
、array_flip
和 strlen
函数的组合。使用这些函数返回符合你的条件的数组。
之后,在结果数组上使用 array_intersect_key
和 array_flip
。
<?php
$array_master = array (
"author_name" => "John",
"discipline" => "Computer Science",
"Date_of_Birth" => "01/01/1970",
"Programming Languages" => "PHP, Objective-C"
);
$filter = array_filter(
array_keys($array_master), function ($key) {
return strlen($key) <= 10;
});
$flip_array = array_intersect_key($array_master, array_flip($filter));
echo "<pre>";
echo var_dump($flip_array);
echo "</pre>";
?>
输出:
array(1) {
["discipline"]=>
string(16) "Computer Science"
}
Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.
LinkedIn