Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как можно разрезать строки
 
 автор: Артем125   (11.10.2009 в 17:41)   письмо автору
 
 

Здравствуйте, у меня есть ключи массива $m[$mij]. Массив одномерный, print_r($m); дает следующее ниже


Array ( [m00head742] => код [m01body1985] => 1  [m35row5head745] => [m40] => [m41col4cat224col4cat224] => [m44col4cat224col4cat224] => 
[m45col4cat224col4cat224row5head] => )


С помошью имени я передаю цифровое значение, по другому проблематично

как можно вообще выцеплять из m41col4cat224col4cat224 например значение 41 или 4 между col и cat. Значения буквенные нам известны, выцеплять нужно цифры в промежутках

можно как-то, пока не знаю с помошью функций strtok(), но там с версиями заморока, а надо точно, подскажите

  Ответить  
 
 автор: Trianon   (11.10.2009 в 18:01)   письмо автору
 
   для: Артем125   (11.10.2009 в 17:41)
 

пожалуй самое простое - регуляркой.
preg_match_all('/([a-z]+)([0-9]+)/', $code, $res);

и array_combine докучи.

  Ответить  
 
 автор: Артем125   (11.10.2009 в 18:13)   письмо автору
 
   для: Trianon   (11.10.2009 в 18:01)
 

а как например с помощью регулярки из m41col4cat224col4cat224 вытащить 224, или 41


$k = 'm41col4cat224col4cat224';

echo  'k='.$k.'<br>';

preg_match_all('/([a-z]+)([0-9]+)/', $k, $res);

print_r($res);



Array ( [0] => Array ( [0] => m41 [1] => col4 [2] => 
cat224 [3] => col4 [4] => cat224 ) [1] => Array ( [0] => 
m [1] => col [2] => cat [3] => col [4] => cat ) [2] => 
Array ( [0] => 41 [1] => 4 [2] => 224 [3] => 4 [4] => 224 ) )


как понял, дальше собрать надо, а что с чем?

  Ответить  
 
 автор: cheops   (11.10.2009 в 18:28)   письмо автору
 
   для: Артем125   (11.10.2009 в 18:13)
 

Вам нужно извлечь все числа или числа с определнным количеством цифр?

  Ответить  
 
 автор: Артем125   (11.10.2009 в 18:30)   письмо автору
 
   для: cheops   (11.10.2009 в 18:28)
 

строка число, строка число, например cat 224 , желательно ключь cat => 224

  Ответить  
 
 автор: cheops   (11.10.2009 в 18:35)   письмо автору
 
   для: Артем125   (11.10.2009 в 18:30)
 

Тогда можно отталкиваться от следующего скрипта
<?php
  
// Получаем содержимое файла
  
$code 'm41col4cat224col4cat224';
  
preg_match_all('/([a-z]+)([0-9]+)/'$code$res);
  
$result = array();
  if(!empty(
$res[1]))
  {
    for(
$i 0$i count($res[1]); $i++)
    
$result[$res[1][$i]] = $res[2][$i];
  }
  echo 
"<pre>";
  
print_r($result);
  echo 
"<pre>";
?>

  Ответить  
 
 автор: Артем125   (11.10.2009 в 18:37)   письмо автору
 
   для: cheops   (11.10.2009 в 18:35)
 

работает, спасибо ))),

  Ответить  
 
 автор: Trianon   (11.10.2009 в 18:39)   письмо автору
 
   для: Артем125   (11.10.2009 в 18:30)
 

Я же написал - и array_combine докучи.
Один вызов функции - и задача решена.
$res = array_combine($res[1],  $res[2]);

  Ответить  
 
 автор: Артем125   (11.10.2009 в 18:42)   письмо автору
 
   для: Trianon   (11.10.2009 в 18:39)
 

Я недопонял выражение "докучи", Спасибо

  Ответить  
 
 автор: Артем125   (11.10.2009 в 20:28)   письмо автору
 
   для: Артем125   (11.10.2009 в 17:41)
 

еще неприятность, зависает


<?php
$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];
                }
                
//echo $result['m'];
                
if ($result['m'] == strval($j.$i))
                {
                       
$mij $key;
                    
$val $v;
                    break;
                }
                
//echo $key.'<br>';
            
            
}
            
            
$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>';
    }
?>


Как получить значение индекса $mij

  Ответить  
 
 автор: Артем125   (11.10.2009 в 21:36)   письмо автору
 
   для: Артем125   (11.10.2009 в 20:28)
 

Вот решение проблемы, пришлось кодировать ключи так m:00:head:742


$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>';
    }


Выражаю большую благодарность всем ответившим !

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования