php - 获取关联数组的数字索引

时间:2010-07-29 18:22:44

标签: php arrays

我有一个关联数组,我需要找到一个键的数字位置。 我可以手动循环遍历数组以找到它,但是有更好的方法构建到PHP中吗?

$a = array(
  'blue'   => 'nice',
  'car'    => 'fast',
  'number' => 'none'
);

// echo (find numeric index of $a['car']); // output: 1

7 个答案:

答案 0 :(得分:244)

echo array_search("car",array_keys($a));

答案 1 :(得分:34)

$blue_keys = array_search("blue", array_keys($a));

http://php.net/manual/en/function.array-keys.php

答案 2 :(得分:2)


  $a = array(
      'blue' => 'nice',
      'car' => 'fast',
      'number' => 'none'
  );  
var_dump(array_search('car', array_keys($a)));
var_dump(array_search('blue', array_keys($a)));
var_dump(array_search('number', array_keys($a)));

答案 3 :(得分:2)

function arrayValuePosition($value, $array)
{
    return array_search($value, array_keys($array));
}

答案 4 :(得分:1)

虽然Fosco的答案没有错,但有一个案例被认为是这个:混合数组。想象一下,我有一个这样的数组:

$a = array(
  "nice",
  "car" => "fast",
  "none"
);

现在,PHP允许这种语法,但它有一个问题:如果我运行Fosco的代码,我得到0 这对我来说是错误的,但为什么会这样?
因为在进行字符串和整数之间的比较时 PHP将字符串转换为整数(在我看来这有点愚蠢),所以当array_search()搜索索引时,它会在第一个停止,因为显然("car" == 0) 是真的array_search()设置为严格模式将无法解决问题,因为即使存在索引为0的元素,array_search("0", array_keys($a))也会返回false。
所以我的解决方案只是将所有索引从array_keys()转换为字符串,然后正确地比较它们:

echo array_search("car", array_map("strval", array_keys($a)));

打印1,这是正确的。

修改
正如Shaun在下面的评论中指出的那样,如果你碰巧搜索这样的int索引,那么同样适用于索引值:

$a = array(
  "foo" => "bar",
  "nice",
  "car" => "fast",
  "none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));

你总是得到0,这是错误的,所以解决办法就是将索引(如果使用变量)转换为这样的字符串:

$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));

答案 5 :(得分:0)

我提出的解决方案......与Fosco的解决方案相比,效率可能相当低:

 protected function getFirstPosition(array$array, $content, $key = true) {

  $index = 0;
  if ($key) {
   foreach ($array as $key => $value) {
    if ($key == $content) {
     return $index;
    }
    $index++;
   }
  } else {
   foreach ($array as $key => $value) {
    if ($value == $content) {
     return $index;
    }
    $index++;
   }
  }
 }

答案 6 :(得分:0)

所有基于array_keys的解决方案均不适用于混合数组。解决方法很简单:

GlideApp.with(mContext)
        // TRY With below line....
        .setDefaultRequestOptions(new GlideOptions().decode(Class<T> class))
        .load(R.drawable.ic_loader)
        .into(imageView);

来自php.net: 如果第三个参数strict设置为TRUE,则array_search()函数将在干草堆中搜索相同的元素。这意味着它还将对大海捞针中的针进行严格的类型比较,并且对象必须是同一实例。