我有两个数组,我想合并为一个根据键后缀。
$keys = array(
'staff_first_name' => NULL,
'staff_last_name' => NULL,
'staff_years' => NULL
);
$submitted_values = array(
'first_name' => 'jon',
'last_name' => 'doe',
'years' => 5
);
我知道我可以使用像here这样的函数并修改它。
但是有没有一个原生的php函数可以完成这一点。我试图使用array_merge_recursive
,但是在查看了文档之后,它不会做我需要它做的事情。
$wanted_array = array(
'staff_first_name' => 'jon',
'staff_last_name' => 'doe',
'staff_years' => 5
);
4条答案
按热度按时间mqkwyuun1#
如果你知道这两个数组大小相同,顺序相同,你可以将
array_combine
与array_keys
一起使用。7dl7o3gd2#
因为它是一个后缀,是相同的每个关键,我们不需要担心它。
如果我们对数组进行ksort排序,它们的排序应该相同,因为所有键数组的后缀都相同。
我故意把几年放在第一位,以证明它是有效的。
https://3v4l.org/cBNhk
如果你需要将$_POST减少到只有这些数组项才能合并它们,你可以使用preg_grep、array_flip、array_values和array_intersect_key的组合来从数组中筛选出想要的项。
我添加了一些额外的项来模拟一个更大的混合$_POST数组。
https://3v4l.org/a3ju1
zwghvu4y3#
这是其中一个问题,我必须恳求OP重新考虑他们的过程。它只会使您的代码复杂化,以引入关联键,而不会立即与表单字段名称同步。这是我能给予你的最好建议:声明键的白名单并为每个键分配默认值,然后过滤,然后替换。
因为你的值都是
null
,所以你的代码可以通过调用array_fill_keys()
变得更加DRY。下面的代码可以写成一行代码,但为了显示每一步,我在每次函数调用后都将数组打印到屏幕上。
代码:(Demo)
输出:
... p.s.确保在将任何值发送到数据库时使用带占位符的预处理语句。
9lowa7mx4#
如果数据量不一致或元素顺序不一致,则使用
array_combine()
很容易受到破坏。为了获得更高的可靠性,可以使用键Map作为两个数组之间的适配器。
如果在目标元素处不存在所寻求的值,则将保留初始
null
值。代码:(Demo)
如果没有键Map,您可以简单地从键中删除前缀来访问提交的元素。Demo