Помощник
|
вопро для Php-гуру, извлеченеие значений из многомерного массива |
webpavilion
|
Сообщение
#1
|
||
|
|
||
|
|||
Zellegius |
12.9.2009, 22:16;
Ответить: Zellegius
Сообщение
#2
|
|
может ввести новую переменную и присвоить ей значение ключа М?
|
|
|
webpavilion
|
Сообщение
#3
|
|
может ввести новую переменную и присвоить ей значение ключа М? думаю не прокатит реальный массив из задачи на 100 верхних ключей а в M md5 как вы переберете массив без цикла? с циклом все просто: foreach ($array as $variable) {
if ($variable['M'] == $x) echo 'все лабы автоматом'; } Сообщение отредактировал webpavilion - 12.9.2009, 22:51 -------------------- Не ведитесь, cамопис это почти всегда плохо! Делаю сайты на Drupal 7.x (очень дорого) |
|
|
skadushkin |
12.9.2009, 23:09;
Ответить: skadushkin
Сообщение
#4
|
|
думаю надо использовать implode
-------------------- |
|
|
Professor |
12.9.2009, 23:51;
Ответить: Professor
Сообщение
#5
|
|
Единственное что могу предложить =)
array_walk($array1, 'test_print'); function test_print($item2) { if($item2["M"]=="c") echo 'все лабы автоматом'; } Но работать будет медленней наверно =) Сообщение отредактировал Professor - 12.9.2009, 23:52 -------------------- |
|
|
Zellegius |
13.9.2009, 10:42;
Ответить: Zellegius
Сообщение
#6
|
|
Вопрос действительно интересный. У меня в итоге нечего путного по заданию не получилось.
Автор, ты сумел сделать без циклов? Если да, то расскажи хотя бы как) |
|
|
DJA |
13.9.2009, 11:16;
Ответить: DJA
Сообщение
#7
|
|
Не специалист в пхп. Может здесь рекурсивную функцию надо использовать?
Вроде: //переменные, которые должны быть доступны во всех функциях int i = 0; int gutXM = 0; //больше нуля - найден ключ, 0 - не найден вызов: checkkey($x); //сама функция function checkkey($x) { if (i >= $array.length) return; //весь массив пройден, ключ не нашли. gutXM останется нулем $variable = $array[i]; //сравниваем новое значение if ($variable['M'] == $x) { //ключ найден gutXM = i; //i - номер элемента массива с нужным ключем return; } else { i++; checkkey($x); } } В общем как-то так |
|
|
brevis |
13.9.2009, 11:33;
Ответить: brevis
Сообщение
#8
|
|
Может как-то так:
<?php
function check($arr, $index, $x) { if (is_array($arr) && $index<count($arr)) { if (isset($arr[$index])) { if (isset($arr[$index]['M']) && $arr[$index]['M'] == $x) echo 'okokokok<br />'; } check($arr, ++$index, $x); } } /*--------- Заполнение массива с данными для теста---------*/ $array = array(); for ($i=0;$i<100;$i++) { $array[$i] = array('M'=>mt_rand(0, 9)); } /*---------------------------------------------------------*/ $x = 3; check($array, 0, $x); ?> Сообщение отредактировал brevis - 13.9.2009, 11:37 |
|
|
Professor |
13.9.2009, 11:41;
Ответить: Professor
Сообщение
#9
|
|
рекурсия в сотни раз хуже чем цикл!!
Потому что вызов функции сам по себе очень ресурсоемкий процесс. да и строчек вы понаписали больше чем ТС =) -------------------- |
|
|
webpavilion
|
Сообщение
#10
|
|
skadushkin, implode () для многомерного массива выведет Array,Array,Array
Zellegius, я сумел в 6 вариантах некоторые опубликовали раньше, есть еще как минимум 2 с использованием goto и с анонимной (lambda-style) функцией. Professor, суть задания состояла не в скорости выполнения а в поиске нестандартных решений... вот что получилось: <? $text = " Александр Сергеевич Пушкин. ЗИМНЕЕ УТРО 1823 год Мороз и солнце; день чудесный! Еще ты дремлешь, друг прелестный — Пора, красавица, проснись: Открой сомкнуты негой взоры Навстречу северной Авроры, Звездою севера явись! Вечор, ты помнишь, вьюга злилась, На мутном небе мгла носилась; Луна, как бледное пятно, Сквозь тучи мрачные желтела, И ты печальная сидела — А нынче... погляди в окно: Под голубыми небесами Великолепными коврами, Блестя на солнце, снег лежит; Прозрачный лес один чернеет, И ель сквозь иней зеленеет, И речка подо льдом блестит. Вся комната янтарным блеском Озарена. Веселым треском Трещит затопленная печь. Приятно думать у лежанки. Но знаешь: не велеть ли в санки Кобылку бурую запречь? Скользя по утреннему снегу, Друг милый, предадимся бегу Нетерпеливого коня И навестим поля пустые, Леса, недавно столь густые, И берег, милый для меня. "; $line = explode (' ',$text); for ($i=count($line);$i!=0;$i--){ $a[] = array('l'=>$i,'m'=>md5($line[$i])); } $x = md5('Кобылку'); define ('OK', ": ok!<br>"); echo 1; //вариант решения function t1 ($p) {if ($p['m']==$GLOBALS['x']) return OK;} echo implode ('',array_map("t1", $a)); echo 2; //вариант решения if (strpos(print_r($a,true),"> $x")) echo OK; echo 3; //вариант решения if (preg_match ("#> $x#s", print_r($a,true))) echo OK; echo 4; //вариант решения if (strstr(http_build_query($a,null,null),"=$x")) echo OK; echo 5; //вариант решения от Professor array_walk($a, 'test_print'); function test_print($item2) { if($item2["m"]==$GLOBALS['x']) echo OK; } echo 6; //вариант решенияидея от brevis, реализация DJA function t3($a, $i, $x) { if (is_array($a) && $i<count($a)) { if (isset($a[$i])) { if (isset($a[$i]['m']) && $a[$i]['m'] == $x) echo OK; } t3($a, ++$i, $x); } } t3($a, 0, $x); если кому интересно могу провести тест производительности. Сообщение отредактировал webpavilion - 13.9.2009, 14:13 -------------------- Не ведитесь, cамопис это почти всегда плохо! Делаю сайты на Drupal 7.x (очень дорого) |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Посоветуйте массажер для спины и шеи | 11 | Boymaster | 925 | Сегодня, 18:24 автор: Arsenwenger |
|
⭕Антидетект браузер AdsPower для эффективной работы с мультиаккаунтами! | 84 | AdsPower | 24589 | Сегодня, 16:35 автор: AdsPower |
|
Betatransfer.net - прием платежей для HIGH RISK проектов, интернет эквайринг и мерчант онлайн оплат | 55 | arendator | 35104 | Сегодня, 2:12 автор: arendator |
|
Rebex.io – Ваша инновационная платформа для обмена криптовалюты! | 3 | Rebex | 973 | Вчера, 20:50 автор: Rebex |
|
Обучение Email Рассылкам + Софт Для Автоматизации (100к в сутки с сервера) | 10 | zennoboss | 4668 | Вчера, 5:20 автор: Skyworker |
Текстовая версия | Сейчас: 25.4.2024, 21:13 |