Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как найти ключь в массиве, зная лишь часть ключа 
V
    Опции темы
Артем125
Дата 11.10.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



Есть массив такого вида 
Код

Array ( [m00head742] => [m01body1985] => 1 [m02body1986] =>   
[m03body1987] => 2 [m04body1988] => 3 
[m10head743] => [m11body1989] => ...[m31body1997] => 1500 [m32body1998] => 
1550 [m33body1999] => 1600 [m34body2000] => 1700 ) 


Массив обходиться в цикле (ниже). Из значения ключа необходимо вытащить цифры стоящие после литеры m, например, из ключа  m03body1987 необходимо вытащить 03. Необходимо обойти этот массив, перелистывая ключи, сверяя значение ключа с текущим значением переменных i j, и если совпадение то вытащить значения соответсвующие найденному ключу . Проблема что скрипт зависает, в процессе перелистывания ключей

Код

$table = '';    
    // Формирование таблицы из массива
    for ($i = 0; $i < $kol_rows_table_new; $i++) 
    {    
        $table = $table.'<tr>';
        for ($j = 0; $j < $kol_сolumns_table_new; $j++) 
        {    
            foreach ($m  as $key => $v)
            {
                preg_match_all('/([a-z]+)([0-9]+)/', $key, $res);
                $result = array();
                if(!empty($res[1]))
                {
                    for($i = 0; $i < count($res[1]); $i++)
                    $result[$res[1][$i]] = $res[2][$i];
                }
                if ($result['m'] == strval($j.$i))
                {
                    $mij = $key;
                    $val = $v;
                }
            
            }
            
            $value = '&nbsp;';
            if (isset($m[$mij])) $value = $val;
            $table = $table.'<td class="price_td"><input type="text" name="5" size="10" maxlength="256" value="'.$value.'"></td>'."\n";
        
        }
        $table = $table.'</tr>';
    }

PM MAIL   Вверх
bars80080
Дата 11.10.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



для получения ключей есть функция, типа array_keys()
после этого массив прогоняется в цикле один раз, а не три. может перестанет зависать
PM MAIL WWW   Вверх
Артем125
Дата 11.10.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



Вот решение проблемы, пришлось ключи делать так m:00:head:742  Идея принадлежала уважаемому capitan .. Отдельное спасибо Ипатьеву .Всем спасибо

Код


$table = '';    
    // Формирование таблицы из массива
    for ($i = 0; $i < $kol_rows_table_new; $i++) 
    {    
        $table = $table.'<tr>';
        for ($j = 0; $j < $kol_сolumns_table_new; $j++) 
        {    
            $ji = strval($j.$i);                
            foreach ($m  as $key => $v)
            {
                $explode = (explode(":", $key));
                $value = '5';
                if ($explode[1] == $ji)
                {
                    if (isset($v)) $value = $v;
                    $table = $table.'<td class="price_td"><input type="text" name="'.$key.'" size="10" maxlength="256" value="'.$v.'"></td>'."\n";
                }
                
            }
        }
        $table = $table.'</tr>';
    }



PM MAIL   Вверх
brother79
Дата 12.10.2009, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 2
Всего: 6



Что-то я не понял что ты тут пытаешься изобрести. Смотрел последний код - и всё, что по нему понял, что он должен создать таблицу с массива сортированного по ключам, по 1 значению на каждый ключ.

Для этого есть ф-я

http://ru.php.net/manual/en/function.ksort.php

ИМХО гораздо проще отсортировать по ключас массив, и раз по нему пробежаться чтобы выкинуть дубли, если такое требуется, чем 3 вложенных цикла с общим числом итераций

100*100*n

вместо n или 2*n итераций

Кроме того

Код


  if (isset($v)) $value = $v;



равносилен 

Код

  $value = $v;


А также использование индексов вида "m:00:head:742" - по сути ничего не даёт, да, так конечно удобней, но и из старого индекса эти 2 цифры также достаются без проблем, даже без регулярок, например 

http://ru2.php.net/manual/en/function.substr.php

Короче непонятно, кому спасибо и за что, и что в итоге получилось, т.к. код какой-то жутко нерациональный
в данном примере

Добавлено через 5 минут и 12 секунд
Хотя нет, я ошибся не 100*100*n , а 10*10*n, не много итераций получается, но всёравно не понятно что там с  if (isset($v))


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.