Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247

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

13.02.2014, 12:05. Показов 4872. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.02.2014, 12:05
Ответы с готовыми решениями:

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

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

Разбить массив на 2 части
Добрый день! Есть массив, который необходимо разбить на части для того, чтобы между ними вывести DIV с информацией. Первая от второй...

19
 Аватар для mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
13.02.2014, 12:13
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  [ТС]
Работает, спасибо.

Вот только у меня не получается встроить это сюда:
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
Цитата Сообщение от 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  [ТС]
Добавлено через 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
там $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  [ТС]
Спасибо вам за старания, но к сожалению вывелось только <hr>
0
 Аватар для mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
14.02.2014, 13:10
Лучший ответ Сообщение было отмечено 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  [ТС]
Работает Щас попробую полностью все данные вытянуть. Я бы никогда не додумался до этого, плохо знаю массивы
0
 Аватар для mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
14.02.2014, 13:24
Цитата Сообщение от SLameN Посмотреть сообщение
Работает
ну я слегка перестарался с трехмерным массивом, но зато код читать удобней
1
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 09:09  [ТС]
А как можно еще добавить сюда переменную
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
Цитата Сообщение от SLameN Посмотреть сообщение
А как можно еще добавить сюда переменную
весь бы кусок кода, ибо я не понимаю, что есть fileLink, а что fileName судя по всему, в коде произошли какие-то изменения
0
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 11:33  [ТС]
Для ясности, есть такая же строка в БД (тоже запятые и т.д.), но из другого столбца 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
SLameN, а количество эелементов в поле fileName такое же как и в fileLink всегда?
0
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
17.02.2014, 13:23  [ТС]
Да, будет такое же
0
 Аватар для mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
17.02.2014, 13:37
Цитата Сообщение от 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  [ТС]
Я добавил еще данные и вылазит какая-то ерунда. Если мои данные не прикреплять то все работает Это мучение какое-то....
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
Цитата Сообщение от 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  [ТС]
Вот здесь какая-то ошибка, подсвечивает 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
Цитата Сообщение от SLameN Посмотреть сообщение
УРа) Спасибо большое вам за помощь!
не за что
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2014, 14:58
Помогаю со студенческими работами здесь

Разбить массив на части, с опред. количеством символов
Здравствуйте! Уже 2 дня ломаю мозг. Помогите кто знает!!! Имеется массив: Array ( =&gt; @Liliane_AZ =&gt; @NoMaD_7777 ...

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

Разбить строку на две части
Есть строка такого вида: Слово=Ссылка Пример: ДП1А=http://forum.rhbz.org/topic.php?forum=2&amp;topic=63 Нужно...

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

Как вытащить данные из ячейки и разбить их на части
Задача: на главной странице располагается блоки со следующими названиями: Керамическая плитка, Керамогранит и т.п.. При клике на которую...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru