Php bir dizi endeks değeri alın

10 Cevap

Ben bir dizi var:

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

Ben belirli bir değer için indeksini almak istiyorum (yani 1 string2 ve 2 için için string3)

Tüm istediğim dizideki dizeleri pozisyonu

  • dizge1 0 olduğu
  • string2 1
  • string3 2'dir

Bu nasıl alabilirim? I array_search denedim ama hiçbir faydası oldu

10 Cevap

Muhtemelen en kolay yolu sadece bir for döngü kullanmak ve aradığınız dize bulmak zaman döngü sayacını döndürmektir.

array_search bunu yapmak için bir yoldur.

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

Elle dizi üzerinde döngü olabilir ve dizin bulmak ama bunun için bir fonksiyon varken neden bunu. Bu fonksiyon her bir anahtar verir ve birleştirici ve normal dizilerde iyi çalışacaktır.

Diğer millet değer bulunan dizi elemanın anahtarını verir array_search() hangi önerdi. Bu dizi anahtarları kullanarak bitişik bir tam sayı olmasını sağlamak array_values() olabilir:

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

// result: 1

Sen array_search() hiçbir kullanımı olduğunu senin soru söyledi. Nedenini açıklayabilir misiniz? Ne çalıştım ve nasıl sizin ihtiyaçlarınızı karşılamak değil mi?

Eğer sadece birkaç tanesi (ve / veya dizi boyutu büyük olduğu) yapıyorsanız, o zaman array_search ile doğru yolda olduğumuzu:

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

Tüm (ya da çok) istiyorsanız, bir döngü daha iyi yapmak prob olacak:

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

/ / Veya dizi yapısı dikkate alınarak:

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

/ / Sadece yapabilirsen

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

/ / Idam

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

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

/ / Çıkış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

Array_keys PHP fonksiyonu deneyin.

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

Biraz daha spesifik olabilir misiniz?

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

Benim için çalışıyor. Eğer daha karmaşık bir şey başarmak için çalışıyoruz?

array_search sadece bu test, iyi çalışması gerektiğini ve beklendiği gibi tuşları döndürür:

$list = array('string1', 'string2', 'string3');
echo "Key = ".array_search('string1', $list);
echo " Key = ".array_search('string2', $list);
echo " Key = ".array_search('string3', $list);

Veya dizin için, kullanmak olabilir

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

Bu kod yeni bir rutin, doğru çok-boyutlu bir dizi ile çalışma gibi aynı şeyi yapmalı ..

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

Üzgünüm, i kullanma dizi formun bir "multi-dimensional" dizidir

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

array_search() does not work for multidimensional arrays (i tried for this) So i preferred using foreach and incrementation

benim çözüldü kodu

function find_array_index($to_find_Key = '', $in_Array = ''){
    $index = 0;
    foreach ($in_Array as $key => $value) {
        if($key == $to_find_Key){
            return $index;
        }
        $index++;
    }
}

kullanarak find_array_index('string2', $array); bana sonucu verdi 1

Neyse, tüm destek için teşekkür ederiz!