2010-06-02 32 views
40

數組的索引值我有一個數組:獲取在PHP

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

我想要得到的指數給定值(即1string22string3

所有我要的是陣列中的串的位置

  • 字符串1是0
  • 字符串2爲1
  • string3是2

如何做到這一點?

+5

你偷很多人的時間內爲您可怕的建制問題。 – 2010-06-03 10:11:04

+3

我的一位科技作家朋友告訴我:「除非你提出正確的問題,否則你無法得到正確答案。」 – 2010-06-03 22:05:48

+0

這是舊的....但我想知道爲什麼:_「我嘗試array_search,但它是沒有用的」_ – dsdsdsdsd 2014-02-13 08:22:43

回答

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

這將返回鍵,而不是索引。在你的例子中,鍵是方便的值的索引。 – 2010-06-02 15:47:07

+1

@smink,OP的數組是非關聯數組,所以它工作正常。 – 2010-06-02 15:48:15

+0

對不起,我沒有指定數組的類型。我使用的陣列是一個多維數組請參閱我的答案的解決方案 – 2010-06-03 04:38:52

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; 

如果你想要所有(或其中很多),一個循環將prob你更好:

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

foreach是我需要的 – zzapper 2014-07-17 10:40:58

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 2010-06-02 16:03:59

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 2016-07-29 04:58:38

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;