С нами с 22.05.09
Сообщения: 639
Рейтинг: 1087
|
Добавлено: 04/10/12 в 20:29 |
Вот примерно код
$m_0=array('a,b,c,d,e' , 'g,h,j,i,k' , 'l,m,n,o,q');
for($i=0;$i<=count($m_0);$i++)
{
$m_.$$i=explode(',',$m_0[$i]);
}
т.е, в результате должно быть 3 массива $m_1, $m_2, $m_3, но нихрена не получается.
|
|
|
|
См.Подпись
С нами с 30.01.07
Сообщения: 33345
Рейтинг: 6370
|
Добавлено: 04/10/12 в 20:53 |
Давно не занимался PHP, и сейчас просмотрел по диагонали, но попробуй если хочешь так:
$m_0=array('a,b,c,d,e' , 'g,h,j,i,k' , 'l,m,n,o,q');
for($i=0;$i<=count($m_0);$i++)
{
$m_.{$i}=explode(',',$m_0[$i]);
}
Либо ${$i}
|
|
Подпись Сдаётся в Аренду. $100 за одну строчку в месяц.
Больше 1000 постов в месяц. Обращайтесь в ЛС.
|
6
|
|
|
См.Подпись
С нами с 30.01.07
Сообщения: 33345
Рейтинг: 6370
|
Добавлено: 04/10/12 в 21:00 |
Скорее второй вариант
|
|
Подпись Сдаётся в Аренду. $100 за одну строчку в месяц.
Больше 1000 постов в месяц. Обращайтесь в ЛС.
|
6
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 04/10/12 в 23:08 |
<?php
$m_0 = array('a,b,c,d,e', 'g,h,j,i,k', 'l,m,n,o,q');
foreach ($m_0 as $v) {
$result[] = explode(',', $v);
}
print_r($result);
|
|
пришел к победе коммунистического труда
|
6
|
|
|
С нами с 22.05.09
Сообщения: 639
Рейтинг: 1087
|
Добавлено: 04/10/12 в 23:42 |
сенкс, второй вариант. последнее не понял к чему
в продолжение - как получить размер новых массивов?
$m_0=array('a,b,c,d,e' , 'g,h,j,i,k' , 'l,m,n,o,q');
for($i=0;$i<=count($m_0);$i++)
{
$m_.${$i}=explode(',',$m_0[$i]);
echo count($m_.${$i});
}
почему-то всегда выводит 1
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 05/10/12 в 00:15 |
st01en: а зачем ты вообще так извращаешься с именами массивов ? Так не делают, ты только зря память и операции тратишь на копии данных. Плюс код жутко не читабельный.
Код: |
<?php
$array = array(
'a,b,c,d,e',
'g,h,j,i,k',
'l,m,n,o,q',
);
foreach ($array as $string) {
$sub_array = explode(',', $string);
print 'Elemnts count: '.count($sub_array).'<br />';
}
|
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
6
|
|
|
С нами с 22.05.09
Сообщения: 639
Рейтинг: 1087
|
Добавлено: 05/10/12 в 00:33 |
ну скажем цель такая - разобрать текст в массив построчно, потом строки разбить по словам, - каждая строка получается новый массив? Потом надо определить длинну каждого массива, найти самый большой и вывести все это дело в таблицу, где кол-во строк = длине самого большого массива. как это можно организовать? причем кол-во слов и предложений в тексте неизвестно.
('a,b,c,d,e', 'g,h,j,i,k', 'l,m,n,o,q') - это только для примера.
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 05/10/12 в 00:52 |
Про таблицу по длине масива не понял. Но примерно так.
Код: |
<?php
$text = "
Еще два человека, которых задержали вместе с остальными, были отпущены из полиции без составления протоколов.
Это Николай Кузнецов и Эльвира Ганиева.
Почему их не заподозрили в нарушении КоАП, не уточняется.
";
$text = explode("\n",trim($text));
// инициализируем начальные данные
$long_string = '';
$string_length = 0;
foreach ($text as $string) {
$current_length = strlen($string);
if ($string_length > $current_length) { continue; }
// если текущая строка длиннее, то выбираем ее.
// иначе до сюда скрипт не дойдет а вернется в начало
// по continue;
$string_length = $current_length;
$long_string = $string;
}
print "Самая длинная строка из {$string_length} символов: <br />{$long_string}";
|
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
6
|
|
|
С нами с 22.05.09
Сообщения: 639
Рейтинг: 1087
|
Добавлено: 05/10/12 в 08:10 |
Stek: Да я знаю, как получить длину массива Задача несколько другая. Вот для примера,
Код: | $text = 'Рыба:Карась,Карп,Окунь,Щука, Лящ. Сыр:Голландский, Российский, Плавленный. Мясо:Свинина, Говядина, Баранина, Кошатина.'; |
В результате нужно вывести вот такую таблицу -
Код: |
Рыба Сыр Мясо
Карась Голландский Свинина
Карп Российский Говядина
Окунь Плавленный Баранина
Щука Кошатина
Лящ |
Причем - именно таблицу с бордюром
Как заменить : и убрать пробелы я тоже знаю Интересует именно динамическое создание массивов и потом возможность с ними работать. Потому что изначально неизвестно, сколько в тексте строк, слов и т.д
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 05/10/12 в 09:01 |
Таблицу с бордюром - это тебе в html уже
А так у тебя 3 варианта для парсинга.
1. Разделять строки по explode()
2. strstr() или strpos() искать точки как конец строки
3. воспользоваться preg_match функцией и парсить регулярками.
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
6
|
|
|
С нами с 22.05.09
Сообщения: 639
Рейтинг: 1087
|
Добавлено: 05/10/12 в 10:39 |
Спасибо за наводку по сравнению массивов Вот собственно код, который делает то, что нужно
Код: [развернуть] | <?php
$text = 'Рыба:Карась,Карп,Окунь,Щука, Лящ,Тюлька. Сыр:Голландский, Российский, Плавленный. Мясо:Свинина, Говядина, Баранина, Кошатина.';
$text_1 = str_replace(':',',',$text);
$m=explode('.',$text_1);
$col=count($m)-1;
for($i=0;$i<=$col;$i++)
{
$m_.${$i}=explode(',',$m[$i]);
}
$max = 0;
foreach ($m as $string) {
$sub_array = explode(',', $string);
$current_count = count($sub_array);
if ($max > $current_count) { continue; }
$max = $current_count;
}
echo '<table border="1"><tr>';
for($k=0;$k<=$col-1;$k++)
{
echo '<td>'.$m_.${$k}[0].'</td>';
}
echo '</tr>';
for($c=1;$c<=$max;$c++)
{
echo '<tr>';
for($t=0;$t<=$col-1;$t++)
{
$var=$m_.${$t}[$c];
echo '<td>'.trim($var).'</td>';
}
echo '</tr>';
}
echo '</table>';
?> |
Но мне интересно - может быть есть какое-то более оптимальное решение?
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 05/10/12 в 16:52 |
$text = 'Рыба:Карась,Карп,Окунь,Щука,Лящ,Тюлька. Сыр:Голландский,Российский,Плавленный. Мясо:Свинина,Говядина,Баранина,Кошатина.';
$text = explode('.', $text);
foreach ($text as $k => $v) {
if (empty($v)) {
continue;
}
preg_match("~(.*?):~isu", $v, $matches);
$v = preg_replace("~(" . $matches[0] . ")~isu", '', $v);
$result[] = array('head' => $matches[1], 'items' => explode(',', $v));
}
echo '<pre>';
print_r($result);
далее вывод в таблицу
|
|
пришел к победе коммунистического труда
|
6
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 05/10/12 в 21:42 |
FXIX:
а preg_match пошто??? где xpath где simple где твои библы??
вот они двойные стандарты в действии.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 05/10/12 в 22:32 |
Sterx писал: | FXIX:
а preg_match пошто??? где xpath где simple где твои библы??
вот они двойные стандарты в действии. |
а могу все объяснить.
там где ты предлагал юзать регулярки:
- написаны дохуя удобных либ. приводящих код в простому виду. по-сути к css-селекторам. ты же предлагал выпарсивать из непонятно какой верстки (в общем случае - невалидной, с вложенными-перевложенными селекторами) регулярками. т.е. переписывать написанное. не секрет что такого уровня регулярки - просто так не напишешь. без литра водки и такой-то матери.
- регулярка вида "(.*?):" понятна даже нубу. тут невозможно ошибиться, в отличие от регулярок которые надо написать чтобы выпарсить из верстки. потом в них также невозможно разобраться.
- ну и это. у меня кода меньше
|
|
пришел к победе коммунистического труда
|
-1
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
|
Спонсор раздела
|