我有一个使用foreach循环的数组,但并非所有的插槽都填充了一个键=>价值对。
$arr = ['trim', 'required', 'max' => 35];
foreach ($arr as $method => $params) {
//validation logic
}
我认为它会跳过没有键的插槽=>价值对。
我怎样才能做到这一点?
我知道我能做到:
$arr = ['trim' => 'trim', 'required' => 'required', 'max' => 35];
只是才能让它发挥作用。
还有其他选择吗?我想保持数组结构不变(也可以添加非key =>值对)。
答案 0 :(得分:1)
是的,您可以使阵列保持相同的结构并使用以下代码 只添加了一行代码,这就是它所需要的一切!
$arr = ['trim', 'required', 'max' => 35];
foreach ($arr as $method => $params)
{
if(is_int($method)) $method = $params; // <<---- this is all it takes
echo $method .' => '. $params .'<br />';
}
答案 1 :(得分:0)
数组总是有键。如果你没有指定密钥,它是一个自动分配的int,从0开始。如果你想要这些作为配置选项并想要关闭密钥,你可能想要这样做:
$arr = ['trim'=>true, 'required'=>true, 'max' => 35];
如果您绝对希望保持原样,则需要同时检查$method
和$param
,因为您决定以这种方式设置结构。 咳嗽不这样做。
答案 2 :(得分:0)
看起来您可能正在尝试动态调用函数?
对于没有参数的函数,你可以使用一个空数组,这样$ method总是一个字符串,而$ params总是一个数组。至少那时你清楚地定义了一些内容,并且你知道你的数组的每个部分是什么。
$arr = [
'trim' => [],
'required' => [],
'max' => [35],
]
我真的不喜欢这种做法。我更喜欢明确而明确的事情。
可能值得退一步并考虑最简单的解决方案。
答案 3 :(得分:-1)
使用array_keys()
功能检查您的密钥。
$arr = ['trim', 'required', 'max' => 35];
print_r(array_keys($arr));
给出:
Array ( [0] => 0 [1] => 1 [2] => max )