【发布时间】:2015-02-06 14:39:23
【问题描述】:
我正在构建一个接收一组数据的 Web API。我想检查这个数组中的某些键,如果需要的键不存在,则返回 false,如果可选的键不存在,则在数组中设置该键值对。
混淆来自于我的输入数组具有潜在的数组作为值。例如,假设我输入了一个这样的数组:
$input_array = array(
’name’ => ‘Adam’,
‘address’ => array(
‘number’ => 12,
‘street’ => ‘My Street’
)
);
我有所需的密钥:
$required_keys = array(
‘name’,
‘address’ => array(
‘number’,
‘street’
)
);
可选键:
$optional_keys = array(
‘address’ = array(
‘postcode’ => ‘WA1'
)
);
我正在努力寻找一种方法来针对这两种类型的测试数组(输入和可选)测试我的输入数组。
应该发生的是: 1) 应匹配所有必需的键。 2)如果任何可选键不存在,则将它们设置为可选键数组中的键值对。
我知道(但不熟悉)正则表达式。但是,我知道 PHP 有一个名为 http_build_query(mixed $array); 的函数,它接受一个数组并将其转换为 URL 查询字符串。我的想法是也许我可以将输入数组转换为 URL 字符串,然后将其与由我的两个测试数组(必需和可选)组成的正则表达式进行比较。这会/可以吗?
如果有人有任何其他想法,我很想知道。 谢谢
更新:附加意外输出
更新 2:附加新输出
更新 3:当前代码:
static public function static_test_required_keys(Array $required_keys_array, Array $input_array)
{
$missing = array();
foreach ($required_keys_array as $key => $value)
{
if (empty($input_array[$key]))
{
$missing[] = $key;
}
else if (isset($input_array[$key]) && is_array($input_array[$key]))
{
$missing = array_merge(Inputter::static_test_required_keys($value, $input_array[$key]), $missing);
}
}
return $missing;
}
更新 4:新代码。
tatic public function static_test_required_keys(Array $required_keys_array, Array $input_array)
{
$missing = array();
foreach ($required_keys_array as $key => $value)
{
if (! isset($input_array[$key]))
{
$missing[] = $key;
}
else if (isset($input_array[$key]) && is_array($input_array[$key]))
{
$missing = array_merge(Inputter::static_test_required_keys($value, $input_array[$key]), $missing);
}
}
return $missing;
}
将代码从isempty() 更改为isset()。这个页面给出了两者之间的区别。 https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/
【问题讨论】:
-
查看手册 php.net/manual/en/ref.array.php 并查看 diff、intersect 和 merge 函数。
-
不要忘记将答案标记为正确(假设有一个)