1

如何判断 foreach 循环中的数组元素是否有键?

一些代码:

function test($p_arr){
   foreach ($p_arr as $key => $value){
     // detect here if key 'came with the array' or not
   }
}

$arr1['a'] = 10;
$arr2[] = 10;
$arr3[2] = 10;

test($arr1); // yes
test($arr2); // no
test($arr3); // yes

编辑#1


我知道这$arr2也是一个自动索引键。我需要知道它是否是自动化的。

编辑#2


我的使用很简单。
在函数中,我创建一个新数组并将$key用作 new $key,如果它是由函数调用提供的。或者$value作为 new $key,如果它在函数调用中被省略。

我知道我可以强制对每个元素使用键,但是在代码的某些部分,数据结构本身是非常动态的* - 我正在尝试尽可能地保持灵活性。

*创建其他代码的代码,创建......等等。

4

3 回答 3

3

显式键和通过 生成的隐式键没有区别[][]并不意味着“给这个元素没有键”,它的意思是“使用这个元素的下一个键” 。

于 2014-03-29T22:48:01.903 回答
2

每个元素都有一个键

$arr1['a'] = 10; // key is the string 'a'
$arr2[] = 10;    // key is will be the integer zero
$arr3[2] = 10;   // key is the integer 2

编辑

也许最好了解您为什么想知道索引是否是自动化的?这似乎很奇怪。

于 2014-03-29T22:47:04.663 回答
1

创建的每个数组都必须有一个键,无论是整数还是字符串作为键或索引,如果没有索引,PHP 将无法解释甚至从它自己的数组中提取信息。

$Var = array ("String","anotherstring","sdfhs","dlj");

上面的数组将自动生成一个从 0 开始的数字索引。

$Array = array();
  $Array[] = "This is a string"; 

以上将信息推送到数组中,因为没有指定索引或键。它将自动分配最接近 0 的数值,该数值在数组中尚不存在。

$Array = array();
  $Array['key'] = "This is another string"; 

上面也将信息推送到数组中,但是因为我们已经指定了一个带有字符串表示的索引,而不是一个自动分配的值。

因此,如果我正确阅读此内容,则可以回答您的问题。

如果您指的是在读取数组之前检查数组值是否由 PHP/代码指定。没有隔音方法,因为在数组有数据之前,所有东西都需要分配给数组。此外,如果您只使用字符串键向数组添加元素,那么可以。有可能的。

如果您依赖自动生成的数值,或分配您自己的数值。无法判断 PHP 是否自动分配了这个,或者你已经指定了。

于 2014-03-29T22:53:38.563 回答