С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
1

Разбить строку на части

13.02.2014, 12:05. Просмотров 2205. Ответов 19
Метки нет (Все метки)

Имеется строка:
Минимальный текст в ней может быть такой: test.php+
Максимальный: test.php+test.php2+test.php3+test.php4 и т.д.

Мне нужно разбить всю строку до символа + и загнать это в переменную, например:
PHP
1
2
3
4
$page1 = test.php;
$page2 = test.php2;
$page3 = test.php3;
$page3 = test.php4;
и т.д.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2014, 12:05
Ответы с готовыми решениями:

разбить строку -Z07+950/-Z07+951 на части
всем привет есть такая строка '-Z07+950/-Z07+951/-Z07+460+951' или такая...

Разбить страницу на 2 части
Приветствую. Нужно что бы на странице было разделение, в левой колонке,...

Разбить массив на части, с опред. количеством символов
Здравствуйте! Уже 2 дня ломаю мозг. Помогите кто знает!!! Имеется массив:...

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

Разбить скрипт на 2 части и выполнить по очереди
Как разбить скрипт на части и выполнить их по очереди, т.е. первая часть...

19
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
13.02.2014, 12:13 2
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$out = array();
$string = "test.php+test.php2+test.php3+test.php4";
 
$s_part = explode("+", $string);
 
 
foreach($s_part as $s)
{
     if($s != "")
     {
           $out[] = $s;
     }
}
 
var_dump($out);
1
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
14.02.2014, 11:45  [ТС] 3
Работает, спасибо.

Вот только у меня не получается встроить это сюда:
PHP
1
2
3
4
5
6
7
8
9
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
    if(mysql_num_rows($textQuery) > 0) {
        for ($i = 0; $i < mysql_num_rows($textQuery); $i++) {
            $textSQL = mysql_fetch_array($textQuery);
            printf("
                здесь много данных из БД
            ", );
        }  
    }
$string - находится в mysql

Как вывести все файлы (число их неизвестно) тоже не знаю... но с этим смирился и буду выводить максимум 5. Планировал сделать так:
PHP
1
2
3
if(!empty($out[0]) {
Показываю файл
}
Но тут тоже проблема, у меня же printf...
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
14.02.2014, 11:55 4
Цитата Сообщение от SLameN Посмотреть сообщение
Вот только у меня не получается встроить это сюда:
в каком виде там вообще данные должны быть выведены, вернее, что лежит в базе? как раз вот эти строки вида "test.php+test.php2+test.php3+test.php4"?

плюс ко всему, в выводе уже изначально все так. вот так мы на экран выводим вообще все, что есть по запросу в формате "имя поля --> значение". дальше уже нужно работать с данными
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
 
if(mysql_num_rows($textQuery) > 0) 
{
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        echo "<br /><hr /><br />";
 
        foreach($textSQL as $key=>$value)
        {
            echo $key." --> ".$value."<br />";
        }
    }  
}
Цитата Сообщение от SLameN Посмотреть сообщение
Как вывести все файлы (число их неизвестно) тоже не знаю
в цикле выводить нужно, если массив не пустой. ну то есть:
PHP
1
2
3
4
5
6
7
if(!empty($out))
{
    for($i = 0; $i < count($out); $i++)
    {
        echo $out[$i]."<br />";
    }
}
0
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
14.02.2014, 12:22  [ТС] 5
Добавлено через 11 минут
Даже сообщение выше не могу отредактировать нормально...

Вот пример БД
MySQL
1
2
3
4
5
id file
1 hiwenie.png+hiwenie.vsd+
2 TXT.txt+Принтеры.txt+Пропуск.docx+
3 Учетные записи на 8.10.xlsx+
4 Телефоны.xlsx+
Делаю так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if(mysql_num_rows($textQuery) > 0) {
        for ($i = 0; $i < mysql_num_rows($textQuery); $i++) {
            $textSQL = mysql_fetch_array($textQuery);
            
            $string = $textSQL['file'];
            $s_part = explode("+", $string);
            
            foreach($s_part as $s) {
                if($s != "") {
                    $out[] = $s;
                }
            }
            echo $textSQL['id']."<br>";
            
            
            if(!empty($out)) {
                for($i = 0; $i < count($out); $i++) {
                    echo "<a href='".$out[$i]."'>".$out[$i]."<br />";
                }
            }
            echo "<br />";
        }
    }
Результат:
4
Телефоны.xlsx

3
Телефоны.xlsx
Учетные записи на 8.10.xlsx

2
Телефоны.xlsx
Учетные записи на 8.10.xlsx
TXT.txt
Принтеры.txt
Пропуск.docx

Куда делся id1? Почему все файлы суммируются...

Модератор, удалите предыдущее сообщение, спасибо
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
14.02.2014, 12:39 6
там $i итерируется несколько раз, и выходит за рамки условия "$i < mysql_num_rows($textQuery)"

должно работать, если не ошибся нигде
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$out = array();
 
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
 
// лучше все-таки использовать while в цикле перебора результатов из базы
 
if(mysql_num_rows($textQuery) > 0) 
{
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        $string = $textSQL["file"];
        $s_part = explode("+", $string);
 
        $out[$i]["id"] = $textSQL["id"];
        $out[$i]["files"] = array();
    
        foreach($s_part as $s) 
        {
            if($s != "") 
            {
                $out[$i]["files"][] = $s;
            }
        }
    }
}
 
// обработку массива и вывод из него лучше делать после полного заполнения,
// когда прошел прогон по базе полностью
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        echo "<hr />";
 
        echo $out[$i]["id"]."<br />";
 
        if(!empty($out[$i]["files"]))
        {
            foreach($out[$i]["files"] as $filename)
            {
                echo $filename."<br />";
            }
        }
    }
}
0
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
14.02.2014, 13:09  [ТС] 7
Спасибо вам за старания, но к сожалению вывелось только <hr>
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
14.02.2014, 13:10 8
Лучший ответ Сообщение было отмечено SLameN как решение

Решение

Цитата Сообщение от SLameN Посмотреть сообщение
Спасибо вам за старания, но к сожалению вывелось только <hr>
блин, итератор на заполнение забыл
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$out = array();
 
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
 
// лучше все-таки использовать while в цикле перебора результатов из базы
 
if(mysql_num_rows($textQuery) > 0) 
{
    $i = 0;
 
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        $string = $textSQL["file"];
        $s_part = explode("+", $string);
 
        $out[$i]["id"] = $textSQL["id"];
        $out[$i]["files"] = array();
    
        foreach($s_part as $s) 
        {
            if($s != "") 
            {
                $out[$i]["files"][] = $s;
            }
        }
 
        $i++;
    }
}
 
// обработку массива и вывод из него лучше делать после полного заполнения,
// когда прошел прогон по базе полностью
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        echo "<hr />";
 
        echo $out[$i]["id"]."<br />";
 
        if(!empty($out[$i]["files"]))
        {
            foreach($out[$i]["files"] as $filename)
            {
                echo $filename."<br />";
            }
        }
    }
}
0
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
14.02.2014, 13:17  [ТС] 9
Работает Щас попробую полностью все данные вытянуть. Я бы никогда не додумался до этого, плохо знаю массивы
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
14.02.2014, 13:24 10
Цитата Сообщение от SLameN Посмотреть сообщение
Работает
ну я слегка перестарался с трехмерным массивом, но зато код читать удобней
1
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 09:09  [ТС] 11
А как можно еще добавить сюда переменную
PHP
1
foreach($out[$i]["fileLink"] as $fileLink)
Добавить:
PHP
1
$out[$i]["fileName"] as $fileName
$out[$i]["fileName"] сделал по аналогии с $out[$i]["fileLink"]
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
17.02.2014, 11:29 12
Цитата Сообщение от SLameN Посмотреть сообщение
А как можно еще добавить сюда переменную
весь бы кусок кода, ибо я не понимаю, что есть fileLink, а что fileName судя по всему, в коде произошли какие-то изменения
0
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 11:33  [ТС] 13
Для ясности, есть такая же строка в БД (тоже запятые и т.д.), но из другого столбца mysql. И когда идет следующий код:
PHP
1
foreach($out[$i]["fileLink"] as $fileLink)
Нужно как-то так вписать, но это не верно
PHP
1
foreach($out[$i]["fileLink"] as $fileLink AND $out[$i]["fileName"] as $fileName)
Добавлено через 2 минуты
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$linkFile .= basename($_FILES['file']['name'][$k])."+"; // название файла имя
$fileLink .= translit(basename($_FILES['file']['name'][$k]))."+"; // название файла ссылка
 
<?php
$out = array();
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
 
if(mysql_num_rows($textQuery) > 0) {
    $i = 0;
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) {
        $string = $textSQL["fileName"];
        $s_part = explode("+", $string);
        
        $string_new = $textSQL["fileLink"];
        $s_part_new = explode("+", $string_new);
 
        $out[$i]["files"] = array();
        $out[$i]["fileLink"] = array();
 
 
 
        foreach($s_part as $s) {
            if($s != "") {
                $out[$i]["files"][] = $s;
            }
        }
        
        foreach($s_part_new as $s_new) {
            if($s_new != "") {
                $out[$i]["fileLink"][] = $s_new;
            }
        }
        $i++;
    }
}
 
if(!empty($out)) {
    for($i = 0; $i < count($out); $i++) {
 
        if(!empty($out[$i]["files"])){
            foreach($out[$i]["files"] as $fileName){
                 echo "<a href='/history_scen/file/".$fileLink."'>".$fileName."</a><br>";
            }
        }
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
17.02.2014, 13:12 14
SLameN, а количество эелементов в поле fileName такое же как и в fileLink всегда?
0
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 13:23  [ТС] 15
Да, будет такое же
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
17.02.2014, 13:37 16
Цитата Сообщение от SLameN Посмотреть сообщение
Да, будет такое же
ну тогда и городить здоровенный массив смысла нет, можно все в один свалить и перебрать вроде должно работать, если не ошибся нигде
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$out = array();
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
 
if(mysql_num_rows($textQuery) > 0) 
{
    $i = 0;
 
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        $string = $textSQL["fileName"];
        $names = explode("+", $string);
        
        $string_new = $textSQL["fileLink"];
        $links = explode("+", $string_new);
 
        for($x = 0; $x < count($names); $x++)
        {
            $out[$i][$x]["name"] = $names[$x];
            $out[$i][$x]["link"] = @$links[$x];
        }
 
        $i++;
    }
}
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        if(!empty($out[$i]))
        {
            foreach($out[$i] as $fileinfo)
            {
                echo "<a href='/history_scen/file/".$fileinfo["link"]."'>".$fileinfo["name"]."</a><br>";
            }
        }
    }
}
0
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 14:05  [ТС] 17
Я добавил еще данные и вылазит какая-то ерунда. Если мои данные не прикреплять то все работает Это мучение какое-то....
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$out = array();
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
 
if(mysql_num_rows($textQuery) > 0) 
{
    $i = 0;
 
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        $out[$i]["text"] = $textSQL["text"];
        $out[$i]["fio"] = $textSQL["fio"];
        $out[$i]["id"] = $textSQL["id"];
        $date = date('d.m.y в H:i', strtotime($textSQL["date"]));
        $out[$i]["date"] = $date;
        
        $string = $textSQL["fileName"];
        $names = explode("+", $string);
  
        $string_new = $textSQL["fileLink"];
        $links = explode("+", $string_new);
 
        for($x = 0; $x < count($names); $x++)
        {
            $out[$i][$x]["name"] = $names[$x];
            $out[$i][$x]["link"] = @$links[$x];   
        }
 
        $i++;
    }
}
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        echo "<div style='border-bottom: 1px dotted gray; margin-bottom: 20px; padding: 10px 5px;'>";
        echo "№".$out[$i]['id']."<br>";
        echo "<strong>Автор:</strong> ".$out[$i]['fio']."<br>";
        echo "<strong>Создан:</strong> ".$out[$i]['date']."<br>";
        echo "<strong>Описание:</strong><br>".$out[$i]['text'];
        echo "<strong>Прикрепленные файлы:</strong><br>";
        if(!empty($out[$i]))
        {
            foreach($out[$i] as $fileinfo)
            {
                echo "<a href='/history_scen/file/".$fileinfo['link']."'>".$fileinfo['name']."</a><br>";
            }
        }
    }
}
Прикрепил скрин БД и что выводит в браузере
0
Миниатюры
Разбить строку на части   Разбить строку на части  
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
17.02.2014, 14:39 18
Цитата Сообщение от SLameN Посмотреть сообщение
Я добавил еще данные и вылазит какая-то ерунда. Если мои данные не прикреплять то все работает Это мучение какое-то....
видимо, тогда так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
$out = array();
$textQuery = mysql_query("SELECT * FROM history_scen ORDER BY id DESC", $db);
 
if(mysql_num_rows($textQuery) > 0) 
{
    $i = 0;
 
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        $out[$i]["text"] = $textSQL["text"];
        $out[$i]["fio"] = $textSQL["fio"];
        $out[$i]["id"] = $textSQL["id"];
        $date = date('d.m.y в H:i', strtotime($textSQL["date"]));
        $out[$i]["date"] = $date;
        
        $string = $textSQL["fileName"];
        $names = explode("+", $string);
  
        $string_new = $textSQL["fileLink"];
        $links = explode("+", $string_new);
 
        $out[$i]["filename"] = array();
        $out[$i]["filelink"] = array();   
 
        for($x = 0; $x < count($names); $x++)
        {
            if($names[$x] != "" && @$links[$x] != "")
            {
                $out[$i]["filename"][] = $names[$x];
                $out[$i]["filelink"][] = $links[$x];   
            }
        }
 
 
        $i++;
    }
}
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        echo "<div style='border-bottom: 1px dotted gray; margin-bottom: 20px; padding: 10px 5px;'>";
        echo "№".$out[$i]['id']."<br>";
        echo "<strong>Автор:</strong> ".$out[$i]['fio']."<br>";
        echo "<strong>Создан:</strong> ".$out[$i]['date']."<br>";
        echo "<strong>Описание:</strong><br>".$out[$i]['text'];
        echo "<strong>Прикрепленные файлы:</strong><br>";
 
        if(!empty($out[$i]["filename"]))
        {
            for($j = 0; $j < count($out[$i]["filename"]); j++)
            {
                echo "<a href='/history_scen/file/".$out[$i]["filelink"][$j]."'>".$out[$i]["filename"][$j]."</a><br>";
            }
        }
    }
}
1
SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 14:54  [ТС] 19
Вот здесь какая-то ошибка, подсвечивает phpDesigner:
PHP
1
for($j = 0; $j < count($out[$i]["filename"]); j++)
Добавлено через 1 минуту
УРа) Спасибо большое вам за помощь!
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
17.02.2014, 14:58 20
Цитата Сообщение от SLameN Посмотреть сообщение
УРа) Спасибо большое вам за помощь!
не за что
0
17.02.2014, 14:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 14:58

Разбить строку
Доброго вреени суток, вопрос по строкам, необходимо приходящую в запросе строку...

Разбить строку?
даны строки, допустим: 18:45Факты. Вечер 18:57Спорт как занести время в...

Разбить строку
Всем привет. Суть задачи: есть url такого видео...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru