Saya memiliki array:
$list = array('string1', 'string2', 'string3');
Saya ingin mendapatkan indeks untuk nilai yang diberikan (yaitu 1
untuk string2
dan 2
untuk string3
)
Yang saya inginkan hanyalah posisi string dalam array
- string1 adalah 0
- string2 adalah 1
- string3 adalah 2
Bagaimana cara mencapai ini?
Jawaban:
array_search
adalah cara untuk melakukannya.Dari dokumen :
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $key = array_search('green', $array); // $key = 2; $key = array_search('red', $array); // $key = 1;
Anda dapat mengulang array secara manual dan menemukan indeksnya tetapi mengapa melakukannya ketika ada fungsi untuk itu. Fungsi ini selalu mengembalikan kunci dan akan bekerja dengan baik dengan array asosiatif dan normal.
sumber
Jika Anda hanya melakukan beberapa di antaranya (dan / atau ukuran arraynya besar), Anda berada di jalur yang benar dengan array_search:
$list = array('string1', 'string2', 'string3'); $k = array_search('string2', $list); //$k = 1;
Jika Anda menginginkan semua (atau banyak dari mereka), sebuah loop akan membantu Anda lebih baik:
foreach ($list as $key => $value) { echo $value . " in " . $key . ", "; } // Prints "string1 in 0, string2 in 1, string3 in 2, "
sumber
Orang lain telah menyarankan
array_search()
yang memberikan kunci elemen array di mana nilainya ditemukan. Anda dapat memastikan bahwa kunci array adalah bilangan bulat yang berdekatan dengan menggunakanarray_values()
:$list = array(0=>'string1', 'foo'=>'string2', 42=>'string3'); $index = array_search('string2', array_values($list)); print "$index\n"; // result: 1
Anda mengatakan dalam pertanyaan Anda
array_search()
itu tidak ada gunanya. Bisakah Anda menjelaskan mengapa? Apa yang Anda coba dan bagaimana itu tidak memenuhi kebutuhan Anda?sumber
// atau mempertimbangkan struktur array Anda:
$array = array( 'string1' => array('a' => '', 'b' => '', 'c' => ''), 'string2' => array('a' => '', 'b' => '', 'c' => ''), 'string3' => array('a' => '', 'b' => '', 'c' => ''), );
// kamu bisa saja
function findIndexOfKey($key_to_index,$array){ return array_search($key_to_index,array_keys($array)); }
// dieksekusi
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";
// kalau tidak
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";
// secara rekursif
print "\r\n//-- Method 3 --//\r\n"; foreach(array_keys($array) as $key => $value){ print '#index of: '.$value.' = '.$key."\r\n"; }
// keluaran
//-- 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
sumber
Masalahnya adalah Anda tidak memiliki indeks numerik pada array Anda.
Menggunakan array_values () akan membuat array berindeks nol yang kemudian dapat Anda cari menggunakan array_search () tanpa perlu menggunakan perulangan for.
$list = array('string1', 'string2', 'string3'); $index = array_search('string2',array_values($list));
sumber
Bisakah Anda lebih spesifik?
$key = array_search('string2',$list)
bekerja dengan baik untuk saya. Apakah Anda mencoba mencapai sesuatu yang lebih kompleks?
sumber
Kode ini harus melakukan hal yang sama seperti rutinitas baru Anda, bekerja dengan larik multi-dimensi yang benar ..
$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));
sumber
Anda harus membuat fungsi untuk ini. Saya rasa tidak ada fungsi bawaan untuk tujuan itu. Semua array PHP asosiatif secara default. Jadi, jika Anda tidak yakin tentang kuncinya, berikut kodenya:
<?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
sumber
Coba fungsi PHP array_keys.
$key_string1 = array_keys($list, 'string1');
sumber
array_keys
berbeda denganarray_search
array_search seharusnya berfungsi dengan baik, cukup uji ini dan ini mengembalikan kunci seperti yang diharapkan:
$list = array('string1', 'string2', 'string3'); echo "Key = ".array_search('string1', $list); echo " Key = ".array_search('string2', $list); echo " Key = ".array_search('string3', $list);
Atau untuk indeks, Anda bisa menggunakan
$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));
sumber
$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;
sumber
Berikut adalah fungsi yang akan berfungsi untuk indeks numerik atau string. Teruskan array sebagai parameter pertama, lalu indeks ke elemen yang perlu dipindahkan dan terakhir atur arah ke -1 untuk memindahkan elemen ke atas dan ke 1 untuk memindahkannya ke bawah. Contoh: Pindahkan (['first' => 'Peter', 'second' => 'Paul', 'third' => 'Kate'], 'second', - 1) akan memindahkan Paul ke atas dan Peter ke bawah.
function Move($a,$element,$direction) { $temp = []; $index = 0; foreach($a as $key=>$value) { $temp[$index++] = $key; } $index = array_search($element,$temp); $newpos = $index+$direction; if(isset($temp[$newpos])) { $value2 = $temp[$newpos]; $temp[$newpos]=$element; $temp[$index]=$value2; } else { # move is not possible return $a; # returns the array unchanged } $final = []; foreach($temp as $next) { $final[$next]=$a[$next]; } return $final;
}
sumber