Get the index of a certain value in an array in PHP

我有一个数组:

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

我想获取给定值的索引(即 string21string32)

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

  • 字符串1是0
  • String2是1
  • 字符串3是2

如何做到这一点?

361162 次浏览

试试 array _ keys PHP 函数。

$key_string1 = array_keys($list, 'string1');

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;

您可以手动遍历数组并查找索引,但是为什么要在有函数的情况下这样做呢。这个函数总是返回一个键,它可以很好地处理关联数组和普通数组。

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));

If you're only doing a few of them (and/or the array size is large), then you were on the right track with 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, "

Could you be a little more specific?

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

我觉得挺好的,你是想完成更复杂的任务吗?

其他人建议使用 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()没有用。你能解释一下为什么吗?你尝试了什么,它怎么不能满足你的需要?

这段代码应该与您的新例程一样,使用正确的多维数组。

 $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));

//或考虑数组结构:

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

// you could just

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

问题是数组上没有数字索引。
使用 array _ values ()将创建一个零索引的数组,然后可以使用 array _ search ()进行搜索,而无需使用 for 循环。

$list = ['string1', 'string2', 'string3'];
$index = array_search('string2',array_values($list));
$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;

您必须为此创建一个函数。我不认为有任何内置的功能,为此目的。默认情况下,所有 PHP 数组都是关联的。所以,如果你不确定他们的钥匙,这里是密码:

<?php


$given_array = array('Monday' => 'boring',
'Friday' => 'yay',
'boring',
'Sunday' => 'fun',
7 => 'boring',
'Saturday' => 'yay fun',
'Wednesday' => 'boring',
'my life' => 'boring');


$repeating_value = "boring";


function array_value_positions($array, $value){
$index = 0;
$value_array = array();
foreach($array as $v){
if($value == $v){
$value_array[$index] = $value;
}
$index++;
}
return $value_array;
}


$value_array = array_value_positions($given_array, $repeating_value);


$result = "The value '$value_array[0]' was found at these indices in the given array: ";


$key_string = implode(', ',array_keys($value_array));


echo $result . $key_string . "\n";//Output: The value 'boring' was found at these indices in the given array: 0, 2, 4, 6, 7


下面是一个适用于数值或字符串索引的函数。将数组作为第一个参数传递,然后将索引传递给需要移动的元素,最后将方向设置为 -1以向上移动元素,并将方向设置为1以向下移动元素。示例: 移动([‘ first’= > ‘ Peter’,‘ second’= > ‘ Paul’,‘ Third’= > ‘ Kate’] ,‘ second’,-1)将使 Paul 向上而 Peter 向下移动。

function Move($a,$element,$direction)
{


$temp = [];
$index = 0;


foreach($a as $key=>$value)
{
$temp[$index++] = $key;
}


$index = array_search($element,$temp);


$newpos = $index+$direction;


if(isset($temp[$newpos]))
{
$value2 = $temp[$newpos];
$temp[$newpos]=$element;
$temp[$index]=$value2;
}
else
{
# move is not possible
return $a; # returns the array unchanged
}


$final = [];


foreach($temp as $next)
{
$final[$next]=$a[$next];
}


return $final;

}