Получить значение индекса массива в PHP
У меня есть массив:
$list = array('string1', 'string2', 'string3');
Я хочу получить индекс для заданного значения (т.е. 1
для string2
и 2
для string3
)
Все, что я хочу, это положение строк в массиве
- string1 = 0
- string2 - 1
- string3 is 2
Как это сделать?
Ответы
Ответ 1
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;
Вы можете вручную перебрать массив и найти индекс, но зачем это делать, если для этого есть функция. Эта функция всегда возвращает ключ, и она будет хорошо работать с ассоциативными и обычными массивами.
Ответ 2
Если вы делаете только несколько из них (и/или размер массива большой), то вы оказались на правильном пути с помощью 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, "
Ответ 3
Другие люди предложили 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()
бесполезно. Можете ли вы объяснить, почему? Что вы попробовали и как это не соответствовало вашим потребностям?
Ответ 4
//или учитывая структуру массива:
$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
Ответ 5
Проблема заключается в том, что у вас нет числового индекса в вашем массиве.
Использование array_values () создаст нулевой индексированный массив, который вы затем можете выполнить с помощью array_search(), минуя необходимость использования цикла for.
$list = array('string1', 'string2', 'string3');
$index = array_search('string2',array_values($list));
Ответ 6
Не могли бы вы быть более конкретными?
$key = array_search('string2',$list)
отлично работает для меня. Вы пытаетесь выполнить что-то более сложное?
Ответ 7
Этот код должен делать то же, что и ваша новая процедура, работая с правильным многомерным массивом.
$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));
Ответ 8
Попробуйте функцию PHP array_keys.
$key_string1 = array_keys($list, 'string1');
Ответ 9
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));
Ответ 10
$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;
Ответ 11
Вам нужно создать функцию для этого. Я не думаю, что есть какая-либо встроенная функция для этой цели. Все массивы 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