2010-06-02 3 views
40

У меня есть массив:Получить значение индекса массива в PHP

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

Я хочу, чтобы получить индекс для заданного значения (т.е. 1 для string2 и 2 для string3)

Все I хочу это положение строк в массиве

  • строка1 0
  • строка2 1
  • string3 является 2

Как этого добиться?

+5

ты украл время многих людей за страшный Сформированный вопрос. –

+3

Мой друг-техник сказал: «Вы не можете получить правильные ответы, если не зададите правильные вопросы». –

+0

это старый .... но я wold хотел знать, почему: _ «Я попробовал array_search, но это было бесполезно» _ – dsdsdsdsd

ответ

86

array_search это способ сделать это.

От docs:

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

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

Вы могли бы перебираем массив вручную и найти индекс, но зачем это делать, когда есть функция для этого. Эта функция всегда возвращает ключ, и он будет хорошо работать с ассоциативными и нормальными массивами.

+4

Это возвращает ключ, а не индекс. В вашем примере ключ является удобным индексом значения. –

+1

@smink, массив OP является неассоциативным массивом, поэтому он отлично работает. –

+0

Извините, я не указал тип массива. Массив, который я использую, представляет собой многомерный массив, пожалуйста, см. Мой ответ на решение. –

1

Попробуйте функцию array_keys PHP.

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

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

Если вы только делаете несколько из них (и/или размер массива велико), то вы на правильном пути с 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, " 
+0

foreach - то, что мне было нужно – zzapper

1

Не могли бы вы быть более конкретными?

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

работает нормально для меня. Вы пытаетесь выполнить что-то более сложное?

6

Другие люди предложили 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() не было никакого смысла. Можете ли вы объяснить, почему? Что вы попробовали и как это не соответствовало вашим потребностям?

+0

«array_values ​​() бесполезно» .. должен быть «array_search() не нужен» – Vex

0

Этот код должен делать то же, что и ваша новая процедура, работая с правильным многомерным массивом.

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

Вопрос ничего не упоминает о многомерных массивах (комментарии OP в других ответах говорят о том, что этот ответ - это то, что он действительно искал, но это, если вы только читаете оригинал вопрос и этот ответ, то, что вы говорите, не имеет смысла) – StubbornShowaGuy

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

// recursersively

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 
4

Проблема заключается в том, что вы не имеете числовой индекс в массиве.
Использование array_values ​​() создаст нулевой индексный массив, который затем можно будет выполнить с помощью array_search(), минуя необходимость использования цикла for.

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