Узнать номер элемента в одномерном массиве без перебора можно?

P
На сайте с 06.01.2009
Offline
601
679

Добрый день.

Есть массив

$test = array("green", "red", "white", "black", "moon");

есть значение

$zvet = "white";

Только так, перебором и проще никак?


foreach (array_values($test ) as $i => $value77) {
if ($zvet == $value77)
{
// наш цвет номер в массиве $test = $i
}
}

Спасибо

ps простите. тупанул. решение найдено.

$nomer = array_search ($zvet, $test);
T
На сайте с 19.12.2006
Offline
101
#1
P
На сайте с 06.01.2009
Offline
601
#2

Задача обойтись без этого

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

чтобы при добавлении данных внутрь массива не менять циферки.

Спасибо

T
На сайте с 19.12.2006
Offline
101
#3
postavkin:

чтобы при добавлении данных внутрь массива не менять циферки.
Спасибо

Если не надо никаких циферек добавлять, все равно вернет ключ массива.

Начиная с нуля.

E
На сайте с 22.06.2016
Offline
45
#4

postavkin, поменяйте ключи со значениями. Или просто в объявлении массива сделайте искомые ключи его ключами (индексами). Так поиск будет происходить значительно быстрее. Ну, и есть array_key_exists, isset и т.п.

---------- Добавлено 30.08.2018 в 10:57 ----------

postavkin:
Задача обойтись без этого, чтобы при добавлении данных внутрь массива не менять циферки.
Кто вам такие задачи ставит?


$i=0;
$array=array('red'=>$i++,'green'=>$i++,'blue'=>$i++);
M
На сайте с 04.10.2011
Offline
90
#5
postavkin:
ps простите. тупанул. решение найдено.

это хорошо... ))

П.С.

Сорри, а нафига вот так писали foreach (array_values($test )

Чисто из интереса. Зачем такое "изысканное" обращение к массиву? ))

Сдается, обращаться скайп avdesk-it-kmm Верстка, кодинг - контакты в профиле... VPS от 5€ (https://gmhost.com.ua/?partner=10255)
S
На сайте с 13.10.2014
Offline
171
#6

строго говоря, array_search это тот-же обход массива, но более низкоуровневый

вот так

foreach (array_values($test ) as $i => $value77) {
делать не надо

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

если вам надо получить позицию элемента в массиве, то лучше добавить обычную переменную

 $i = 0;
foreach ($qqq as $key => $value77) {
//code
$i++;
}
Подобный вариант описан в мануале

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий