[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблемы с поиском по массиву
Gradus
голова вообще не рубит smile.gif

$mas[0]=array('key'=>24,'ban'=>12);
$mas[1]=array('key'=>56,'ban'=>76);
$mas[2]=array('key'=>24,'ban'=>24);
...


foreach ($mas as $k=>$v)
{
$key = array_search(array('key'=>$v['ban']), $mas); // не знаю на чё расчитывал smile.gif
}

чёто туплю (жара).
Надо в цикле узнать есть ли массив с key такой как у нынешнего ban
В этом примере это $mas[2]['ban']==$mas[0]['key']



Спустя 26 минут, 32 секунды (25.06.2010 - 09:50) kirik написал(а):
Не проще сделать одноуровневый ассоциативный массив где ключом будет "key" а значением "ban"?
$mas = array(
// key => ban,
24 => 12,
56 => 76,
// ...
);


Так проще будет проверить. Но если у тебя key и ban не уникальны, тогда не выйдет.. Нужно будет придумывать нагромождение циклов (как самый очевидный вариант)..

Спустя 11 минут, 2 секунды (25.06.2010 - 10:01) kirik написал(а):
И да..

 ! 
Давай темам осмысленные названия

Спустя 5 минут, 21 секунда (25.06.2010 - 10:07) Gradus написал(а):
нет я не могу переделать структуру, нуна именно в таком примере именно в цикле это сделать.
это я альтернативу привёл многотонному коду smile.gif

Спустя 3 минуты, 46 секунд (25.06.2010 - 10:10) tomash написал(а):
Gradus
Двумя циклами

Спустя 2 минуты, 8 секунд (25.06.2010 - 10:13) Gradus написал(а):
нет, ещё циклы не прокатят.Повиснет всё smile.gif

Спустя 3 минуты, 5 секунд (25.06.2010 - 10:16) kirik написал(а):
Гм.. ну тогда как-то так:
$mas[0]=array('key'=>24,'ban'=>12);
$mas[1]=array('key'=>56,'ban'=>76);
$mas[2]=array('key'=>24,'ban'=>24);

$keys = $bans = array();

foreach($mas as $k => $v) {
$keys[$k] = $v['key'];
$bans[$k] = $v['ban'];
}

foreach($bans as $k => $v) {
if(in_array($v, $keys)) {
// есть такой элемент
} else {
// нету его
}
}


может не лучший вариант, но работать должен.

ЗЫ. увидел мессагу про "Повиснет всё" - попробуй использовать while вместо foreach..

Спустя 12 минут, 44 секунды (25.06.2010 - 10:28) Gradus написал(а):
щас попробую крайний вариант создать соседний массив где ключём будет выступать ban, а значения это ключ первого массива
потом проверять

if(isset($mas2[$k])) echo 'нашёл: $mas['.$mas2[$k].']';

чёт типо того smile.gif но хотелось бы другой вариант

Цитата
ЗЫ. увидел мессагу про "Повиснет всё" - попробуй использовать while вместо foreach..

а разве foreach не быстрей ?

Спустя 7 минут, 2 секунды (25.06.2010 - 10:35) DedMorozzz написал(а):
А регуляркой не лучше ли будет? Брать значение Кей и подставлять его в Бан.

Спустя 1 минута, 39 секунд (25.06.2010 - 10:37) tomash написал(а):
$mas[0]=array('key'=>24,'ban'=>12);
$mas[1]=array('key'=>56,'ban'=>76);
$mas[2]=array('key'=>24,'ban'=>24);
...


foreach ($mas as $v)
{
$mas_key[] = $v['key'];
$mas_ban[] = $v['ban'];
}

$mas_res = array_intersect ($mas_key, $mas_ban);
print_r ($mas_res);

Спустя 5 минут, 14 секунд (25.06.2010 - 10:42) DedMorozzz написал(а):
Цитата
array_intersect() возвращает массив, содержащий все значения массива array1, которые имеются во всех аргументах
не для данного случая. Проще регуляркой. Как выше написал.

Спустя 3 минуты, 44 секунды (25.06.2010 - 10:46) tomash написал(а):
DedMorozzz

Цитата (Gradus @ 25.06.2010 - 06:24)
Надо в цикле узнать есть ли массив с key такой как у нынешнего ban


Задача стоит узнать, вот мы и узнаем smile.gif

Спустя 4 минуты, 27 секунд (25.06.2010 - 10:51) Gradus написал(а):
DedMorozzz, моя твоя не понимать.Куда ты тут хочеш регулярки впихнуть smile.gif
вот вариант который я выше описал, но опять же лишний цикл


$mas[0]=array('key'=>24,'ban'=>12);
$mas[1]=array('key'=>56,'ban'=>76);
$mas[2]=array('key'=>24,'ban'=>24);

$mas_key=array();

foreach ($mas as $k=>$v)
{
$mas_key[$v['key']][]=$k;
//или так
$mas_key[$v['key']][$k]=true;
}

//этот цикл обязателен
foreach ($mas as $k=>$v)
{
if(!empty($mas_key[$v['ban']])) echo 'Нашёл';
// ля ля ля ля ля
}


Спустя 12 часов, 26 минут, 16 секунд (25.06.2010 - 23:17) kirik написал(а):
Цитата (Gradus @ 25.06.2010 - 02:28)
а разве foreach не быстрей ?

Читани тут.



_____________
ДАВАЙ ДЕНЬГИ
R543264623869
Быстрый ответ:

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