Foreach($ arr as $ key => $ value):$ arr并不总是有key =>价值对

时间:2014-05-06 13:49:24

标签: php arrays

我有一个使用foreach循环的数组,但并非所有的插槽都填充了一个键=>价值对。

$arr = ['trim', 'required', 'max' => 35];

foreach ($arr as $method => $params) {
    //validation logic
}

我认为它会跳过没有键的插槽=>价值对。

我怎样才能做到这一点?

我知道我能做到:

$arr = ['trim' => 'trim', 'required' => 'required', 'max' => 35];

只是才能让它发挥作用。

还有其他选择吗?我想保持数组结构不变(也可以添加非key =>值对)。

4 个答案:

答案 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 )