【问题标题】:Does array element has a key数组元素是否有键
【发布时间】:2014-03-29 22:43:22
【问题描述】:

如何判断 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,如果它在函数调用中被省略。

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

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

【问题讨论】:

  • 我不确定您所说的 '与数组一起' 是什么意思。 $key 将永远是您的数组的键。
  • 每个数组元素总是有一个键,做一个 print_r() 或 var_dump() 看看
  • 你说的都对,请检查编辑
  • “自动索引键”是什么意思?您是指数字键与关联(字符串)键吗?
  • 您无法判断它是“自动”还是明确设置;而且我无法解决您需要...也许如果您解释了您要实现的业务案例

标签: php arrays array-key


【解决方案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
    

    编辑

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

    【讨论】:

      【解决方案3】:

      每个创建的数组都必须有一个键,无论是整数还是字符串作为键或 index,如果没有索引,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 是否自动分配了这个,或者你已经指定了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-26
        • 2017-04-24
        • 2014-10-25
        • 2012-08-20
        • 2021-11-09
        • 2021-06-08
        相关资源
        最近更新 更多