[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: поиск по двумерному массиву
Ka4_0k
Вот возникла задача:
Есть массив вида

$arr['new'] = array('option1'=>'value1', 'option2'=>'value2');
$arr['old'] = array('option3'=>'value3', 'option4'=>'value4');

Есть ли стандартные функции для поиска значения value3 например в массиве $arr? Мне нужно чтобы поиск вернул путь, т.е. что-то типа $arr['old']['option3']. Такое возможно стандартными методами, или писать свою функицию?



Спустя 14 минут, 51 секунда (26.11.2009 - 18:01) Krevedko написал(а):
array_search наверное

Спустя 1 минута, 4 секунды (26.11.2009 - 18:02) Krevedko написал(а):
array_search — Осуществляет поиск данного значения в массиве и возвращает соответствующий ключ в случае удачи

Описание
mixed array_search ( mixed $needle , array $haystack [, bool $strict ] )
Ищет в haystack значение needle и возвращает ключ, если таковое присутствует в массиве, FALSE в противном случае.

Спустя 11 минут, 56 секунд (26.11.2009 - 18:14) Ka4_0k написал(а):
Она ищет по одномерному вродь только О_о.. Пока написал свою и там её какраз использую.

Спустя 12 минут, 22 секунды (26.11.2009 - 18:27) Krevedko написал(а):
ну может тогда ей искать скажем в $arr['new'] потом в $arr['old']

Спустя 3 часа, 26 минут, 54 секунды (26.11.2009 - 21:53) Ka4_0k написал(а):
Цитата (Krevedko @ 26.11.2009 - 15:27)
ну может тогда ей искать скажем в $arr['new'] потом в $arr['old']

Сейчас так и сделано. Я же написал выше. Я задавал вопрос в надежде получить хоть сколько нибудь полезный ответ. Есть ли такая функция или нет.

Спустя 1 час, 13 минут, 16 секунд (26.11.2009 - 23:07) Krevedko написал(а):
ок. извини, что не смог помочь

Спустя 44 минуты, 45 секунд (26.11.2009 - 23:52) glock18 написал(а):
Ka4_0k
такой функции нет. хотелось бы понять, в каком виде ты хотел бы получить ответ от этой функции? То что указал выше == тому, что ты искал, так что не катит. smile.gif

Спустя 8 часов, 4 минуты, 32 секунды (27.11.2009 - 07:56) Ka4_0k написал(а):
Спасибо, такой ответ я и рассчитывал получить:) Просто стандартное ведь работает на порядок быстрее чем самописное.

Спустя 1 час, 36 минут, 28 секунд (27.11.2009 - 09:33) Sylex написал(а):
<?php 
function
arr_search ( $array, $expression ) {
$result = array();
$expression = preg_replace ( "/([^\s]+?)(=|<|>|!)/", "\$a['$1']$2", $expression );
foreach ( $array as $a ) if ( eval ( "return $expression;" ) ) $result[] = $a;
return $result;
}

$data = array (
array ( "name" => "bill", "age" => 40 ),
array ( "name" => "john", "age" => 30 ),
array ( "name" => "jack", "age" => 50 ),
array ( "name" => "john", "age" => 25 )
);


print_r ( arr_search ( $data, "age>=30" ) );
print_r ( arr_search ( $data, "name=='john'" ) );
print_r ( arr_search ( $data, "age>25 and name=='john'" ) );
?>


-- results --

Array 
(
[
0] => Array
(
[
name] => bill
[age] => 40
)

[
1] => Array
(
[
name] => john
[age] => 30
)

[
2] => Array
(
[
name] => jack
[age] => 50
)

)

Array
(
[
0] => Array
(
[
name] => john
[age] => 30
)

[
1] => Array
(
[
name] => john
[age] => 25
)

)

Array
(
[
0] => Array
(
[
name] => john
[age] => 30
)

)


Мне понравилось smile.gif

Афтор не я.

Спустя 1 час, 48 минут, 47 секунд (27.11.2009 - 11:21) glock18 написал(а):
оно с eval и регуляркой только ну ооочень медленное будет

Спустя 2 минуты, 39 секунд (27.11.2009 - 11:24) Sylex написал(а):
glock18
ну не прям уж так оооочень smile.gif Но для больших массивов - конечно.

бывает надо найти среди 10-20 строк, и тогда вообще не паришься wink.gif

Спустя 16 минут, 8 секунд (27.11.2009 - 11:40) Ka4_0k написал(а):
function search_value($value, $array) {
$path="";
foreach($array as $key=>$options) {
$field = array_search($value,$options);
if($field!==false) {
$path = $key;
break;
}
}

if($path!="")
return $path;
else
return
false;
}

Вот моя =)

Спустя 7 минут, 25 секунд (27.11.2009 - 11:47) glock18 написал(а):
Sylex
10-20 может. но сам факт использования eval в цикле - это зло smile.gif рекомендуется в этом случае использовать create_function - тогда Zend Parser вызывается только один раз, и уже будет приличный выигрыш в скорости. А так - Zend Parser вызывается каждую итерацию по массиву.

ну в общем, решение прикольное, жаль только медленное smile.gif

Спустя 1 час, 35 минут, 9 секунд (27.11.2009 - 13:23) Krevedko написал(а):
качок-а сколько у тебя жим лежа ?
я 120 на раз blink.gif

Спустя 2 часа, 7 минут, 4 секунды (27.11.2009 - 15:30) Ka4_0k написал(а):
Цитата (Krevedko @ 27.11.2009 - 10:23)
качок-а сколько у тебя жим лежа ?
я 120 на раз  blink.gif

Как относится конечно не понял но 125 при моём весе в 83. Был. Уже пол года не занимаюсь. tongue.gif

Спустя 1 час, 22 минуты, 53 секунды (27.11.2009 - 16:53) Krevedko написал(а):
аналогично. даже больше sad.gif весной наверное опять пойду.


_____________
-Oh My God! They Killed Kenny!
-You Bastards!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.