获取PHP中数组的索引值

我有一个数组:

$list = array('string1', 'string2', 'string3');

我想获取给定值的索引(例如string21,而string32

我想要的只是字符串在数组中的位置

  • 字符串1为0
  • string2是1
  • string3是2

如何实现呢?

Aakash Chakravarthy asked 2019-10-08T11:52:19Z
10个解决方案
115 votes

array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed是这样做的方法。

array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed

来自文档:

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

您可以手动遍历数组并找到索引,但是为什么要在有此功能的情况下这样做呢? 此函数始终返回键,并且将与关联数组和普通数组一起使用。

RaYell answered 2019-10-08T11:52:48Z
15 votes

如果仅执行其中的一些操作(和/或数组大小很大),则使用array_search的方向正确:

$list = array('string1', 'string2', 'string3');
$k = array_search('string2', $list); //$k = 1;

如果您想要全部(或其中很多),则循环可能使您更好:

foreach ($list as $key => $value) {
    echo $value . " in " . $key . ", ";
}
// Prints "string1 in 0, string2 in 1, string3 in 2, "
ircmaxell answered 2019-10-08T11:53:20Z
8 votes

其他人提出了array_search()的建议,它给出了找到值的数组元素的键。 您可以使用array_values()确保数组键是连续的整数:

$list = array(0=>'string1', 'foo'=>'string2', 42=>'string3');
$index = array_search('string2', array_values($list));
print "$index\n";

// result: 1

您在问题中说array_search()没有用。 你能解释为什么吗? 您尝试了什么?它又如何满足您的需求?

Bill Karwin answered 2019-10-08T11:53:54Z
8 votes

//或考虑您的数组结构:

$array = array(
  'string1' => array('a' => '', 'b' => '', 'c' => ''),
  'string2' => array('a' => '', 'b' => '', 'c' => ''),
  'string3' => array('a' => '', 'b' => '', 'c' => ''),
);

//您可以

function findIndexOfKey($key_to_index,$array){
  return array_search($key_to_index,array_keys($array));
}

//执行

print "\r\n//-- Method 1 --//\r\n";
print '#index of: string1 = '.findIndexofKey('string1',$array)."\r\n";
print '#index of: string2 = '.findIndexofKey('string2',$array)."\r\n";
print '#index of: string3 = '.findIndexofKey('string3',$array)."\r\n";

//或者

print "\r\n//-- Method 2 --//\r\n";
print '#index of: string1 = '.array_search('string1',array_keys($array))."\r\n";
print '#index of: string2 = '.array_search('string2',array_keys($array))."\r\n";
print '#index of: string3 = '.array_search('string3',array_keys($array))."\r\n";

//递归地

print "\r\n//-- Method 3 --//\r\n";
foreach(array_keys($array) as $key => $value){
  print '#index of: '.$value.' = '.$key."\r\n";
}

//输出

//-- Method 1 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

//-- Method 2 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

//-- Method 3 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2
Michael Hurley answered 2019-10-08T11:54:56Z
5 votes

问题是您的数组上没有数字索引。
使用array_values()将创建一个零索引数组,然后您可以使用array_search()搜索,而无需使用for循环。

$list = array('string1', 'string2', 'string3');
$index = array_search('string2',array_values($list));
Brian Berneker answered 2019-10-08T11:55:32Z
1 votes

尝试使用array_keys PHP函数。

$key_string1 = array_keys($list, 'string1');
Evernoob answered 2019-10-08T11:55:59Z
1 votes

您能具体一点吗?

$key = array_search('string2',$list)

对我来说很好。 您是否正在尝试完成更复杂的事情?

Jeff answered 2019-10-08T11:56:34Z
1 votes

此代码应与新例程相同,并使用正确的多维数组。

 $arr = array(
  'string1' => array('a' => '', 'b' => '', 'c' => ''),
  'string2' => array('a' => '', 'b' => '', 'c' => ''),
  'string3' => array('a' => '', 'b' => '', 'c' => '')
 );

 echo 'Index of "string2" = '. array_search('string2', array_keys($arr));
Vex answered 2019-10-08T11:57:00Z
0 votes

array_search应该可以正常工作,刚刚对其进行了测试,它会按预期返回键:

$list = array('string1', 'string2', 'string3');
echo "Key = ".array_search('string1', $list);
echo " Key = ".array_search('string2', $list);
echo " Key = ".array_search('string3', $list);

或者对于索引,您可以使用

$list = array('string1', 'string2', 'string3');
echo "Index = ".array_search('string1', array_merge($list));
echo " Index = ".array_search('string2', array_merge($list));
echo " Index = ".array_search('string3', array_merge($list));
Vex answered 2019-10-08T11:57:33Z
0 votes
$find="Topsite";
$list=array("Tope","Ajayi","Topsite","Infotech");
$list_count=count($list);
sort($list);
for($i=0;$i<$list_count;$i++)
{
    if($list[$i]==$find){
         $position=$i;
    }

}
echo $position;
Ajayi Temitope answered 2019-10-08T11:57:52Z
translate from https://stackoverflow.com:/questions/2959222/get-the-index-value-of-an-array-in-php