在PHP中获取数组的索引值

Aak*_*thy 68 php arrays

我有一个数组:

$list = array('string1', 'string2', 'string3');
Run Code Online (Sandbox Code Playgroud)

我想获得给定值的索引(即1for string22for string3)

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

  • string1为0
  • string2是1
  • string3是2

怎么做到这一点?

RaY*_*ell 133

array_search 是这样做的方式.

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;
Run Code Online (Sandbox Code Playgroud)

您可以手动循环遍历数组并找到索引,但为什么在有功能时才会这样做.此函数始终返回一个键,它将与关联和正常数组一起使用.

  • 这将返回键,而不是索引.在您的示例中,键是方便的值的索引. (8认同)

irc*_*ell 16

如果你只做了一些(和/或数组大小),那么你使用array_search进入了正确的轨道:

$list = array('string1', 'string2', 'string3');
$k = array_search('string2', $list); //$k = 1;
Run Code Online (Sandbox Code Playgroud)

如果你想要所有(或很多),一个循环可能会让你更好:

foreach ($list as $key => $value) {
    echo $value . " in " . $key . ", ";
}
// Prints "string1 in 0, string2 in 1, string3 in 2, "
Run Code Online (Sandbox Code Playgroud)


Bil*_*win 8

其他人建议array_search()给出数组元素的键,其中找到值.您可以使用以下命令确保数组键是连续的整数array_values():

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

// result: 1
Run Code Online (Sandbox Code Playgroud)

你在问题中说array_search()没用.你能解释一下原因吗?你尝试了什么,它是如何不符合你的需求的?


小智 8

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

$array = array(
  'string1' => array('a' => '', 'b' => '', 'c' => ''),
  'string2' => array('a' => '', 'b' => '', 'c' => ''),
  'string3' => array('a' => '', 'b' => '', 'c' => ''),
);
Run Code Online (Sandbox Code Playgroud)

//你可以

function findIndexOfKey($key_to_index,$array){
  return array_search($key_to_index,array_keys($array));
}
Run Code Online (Sandbox Code Playgroud)

//执行

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";
Run Code Online (Sandbox Code Playgroud)

//或者

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";
Run Code Online (Sandbox Code Playgroud)

//递归

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

//输出

//-- 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
Run Code Online (Sandbox Code Playgroud)


小智 5

问题是您的阵列上没有数字索引.
使用array_values()将创建一个零索引数组,然后您可以使用array_search()进行搜索,从而绕过了使用for循环的需要.

$list = array('string1', 'string2', 'string3');
$index = array_search('string2',array_values($list));
Run Code Online (Sandbox Code Playgroud)