如何判断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
我知道$arr2
也是一个自动索引键。我需要知道它是否自动化。
我对它的使用很简单
在函数中,我创建了一个新数组,并使用$key
作为新$key
,如果它是由函数调用提供的。或者$value
作为新的$key
,如果它在函数调用中被省略。
我知道我可以强制使用每个元素的键,但在代码的某些部分,数据结构本身非常动态* - 并且我尽可能地保持灵活性。
*创建其他代码的代码,创建......等等。
答案 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已自动分配,或您已指定,则无法判断。