数组元素是否有键

时间:2014-03-29 22:43:23

标签: php arrays array-key

如何判断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作为新$key,如果它是由函数调用提供的。或者$value作为新的$key,如果它在函数调用中被省略。

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

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

3 个答案:

答案 0 :(得分:3)

通过[]生成的显式键和隐式键之间没有区别。 []并不代表"给这个元素没有键",它意味着"使用该元素的下一个键"。

答案 1 :(得分: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

修改

也许理解为什么你想知道索引是否自动化是很好的?这看起来很奇怪。

答案 2 :(得分: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 / The Code指定了数组值。没有隔音方法,因为在有数据之前需要将所有内容分配给阵列。更进一步,如果您只使用字符串键向数组添加元素,那么是。这是可能的。

如果您依靠自动生成的数值,或者指定自己的数值。如果PHP已自动分配,或您已指定,则无法判断。