Soru PHP'de bir dizinin indeks değerini alın


Bir dizim var:

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

Belirli bir değer için indeksi almak istiyorum (ör. 1 için string2 ve 2 için string3)

Tek istediğim dizideki dizelerin konumu

  • dize1 0
  • string2 1'dir
  • string3 2'dir

Bunu nasıl başarabilirim?


44
2018-06-02 15:38


Menşei


Bir teknoloji yazarı arkadaşım bana şunları söyledi: "Doğru soruları sormadıkça doğru cevapları alamıyorsunuz." - Bill Karwin
Bu eski .... ama nedenini bilmek istedim: "Dizi_search'i denedim ama hiç faydası olmadı" - dsdsdsdsd
Lütfen, yüksek puanlı yanıtı kabul edildi olarak işaretleyin. - robsch


Cevaplar:


array_search Bunu yapmanın yolu.

İtibaren 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;

Diziyi manuel olarak çevirebilir ve dizini bulabilirsin ama bunun için bir işlev olduğunda bunu neden yapıyorsun? Bu işlev her zaman bir anahtar döndürür ve ilişkilendirici ve normal dizilerle iyi çalışır.


92
2018-06-02 15:43



Bu, indeksi değil anahtarı döndürür. Örneğinizde, anahtar uygun bir şekilde değerin indeksidir. - Jorge Ferreira
@smink, OP'nin dizisi ilişkisel olmayan bir dizidir, bu yüzden iyi çalışır. - Matthew Flaschen
Üzgünüm, dizinin türünü belirtmedim. Kullandığım dizi çok boyutlu bir dizidir. Lütfen çözüm için cevabımı bakın - Aakash Chakravarthy
Ve asker cevapları kabul edildiği gibi 1 puan ile işaretler. facepalm - Jez
Bu tür bir dizim var: [0 => {id: 1, ad: bir şey}, 1 => {.....}, ...]. Bu array_search gibi anahtar / dizin bulmak mümkün mü ("isim" => bir şey, $ dizi)? - lazzy_ms


Sadece bir kaçını yapıyorsanız (ve / veya dizi boyutu büyükse), array_search ile doğru yoldasınız:

$list = array('string1', 'string2', 'string3');
$k = array_search('string2', $list); //$k = 1;

Eğer hepsini (veya bir çoğunu) istiyorsanız, bir döngü size daha iyi gelir:

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

14
2018-06-02 15:46



foreach ihtiyacım olan şey - zzapper


Diğer millet önerdi array_search() Bu, değerin bulunduğu dizi elemanının anahtarını verir. Dizi tuşlarının kullanarak bitişik tamsayılar olduğundan emin olabilirsiniz. array_values():

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

// result: 1

Sorduğun soruda array_search() kullanımdı. Bana nedenini açıklayabilir misin? Ne denedin ve ihtiyaçlarınızı nasıl karşılayamadı?


7
2018-06-02 15:54



"array_values ​​() hiçbir kullanımdı" .. olması gerekir "array_search () hiçbir kullanımdı" - Vex


// veya dizi yapınızı göz önünde bulundurarak:

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

// sadece yapabilirsin

function findIndexOfKey($key_to_index,$array){
  return array_search($key_to_index,array_keys($array));
}

// yürütüldü

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

// alternatif olarak

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

// çıktılar

//-- 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
2018-01-17 22:37





Sorun, dizinizde sayısal bir dizinin olmamasıdır.
Array_values ​​() işlevini kullanarak, bir for döngüsünü kullanma gereksinimini atlayarak array_search () yöntemini kullanarak arama yapabileceğiniz sıfıra endeksli bir dizi oluşturur.

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

4
2018-03-20 15:08





Array_keys PHP işlevini deneyin.

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

1
2018-06-02 15:42





Biraz daha spesifik olabilir misin?

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

benim için iyi çalışıyor. Daha karmaşık bir şeyi başarmaya mı çalışıyorsunuz?


1
2018-06-02 15:49





Bu kod, yeni rutininizle aynı şeyi yapmalı, doğru çok boyutlu dizi ile çalışmalıdır.

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

1
2018-06-03 10:05



Soru, çok boyutlu diziler hakkında hiçbir şeyden bahsetmez (diğer cevaplardaki OP'nin yorumları, bu cevabın aslında aradığı şey olduğunu gösterir, fakat eğer sadece orijinal soruyu ve bu cevabı okuyorsanız, söyledikleriniz hiçbir anlam ifade etmez) - StubbornShowaGuy