Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 17

Немного переделать функцию

11.07.2017, 10:44. Показов 847. Ответов 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
if (!function_exists('http_parse_headers')) {
    function http_parse_headers($text) {
        $headers = array();
        $key = '';
 
        foreach(explode("\n", $text) as $i => $h) {
            $h = explode(':', $h, 2);
 
            if (isset($h[1])) {
                if (!isset($headers[$h[0]]))
                    $headers[$h[0]] = trim($h[1]);
                elseif (is_array($headers[$h[0]])) {
                    $headers[$h[0]] = array_merge($headers[$h[0]], array(trim($h[1])));
                }
                else {
                    $headers[$h[0]] = array_merge(array($headers[$h[0]]), array(trim($h[1])));
                }
 
                $key = $h[0];
            }
            else {
                if (substr($h[0], 0, 1) == "\t")
                    $headers[$key] .= "\r\n\t".trim($h[0]);
                elseif (!$key)
                    $headers[0] = trim($h[0]);
            }
        }
 
        return $headers;
    }
}
Но у неё маленький баг, например есть строка 787 символов, но в масив попадает не вся, где то например 87 символов, а нужно всю заполучить.

Вторая чужая функция:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if( !function_exists( 'http_parse_headers' ) ) {
    function http_parse_headers( $text )
    {
        $retVal = array();
        $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $text));
        foreach( $fields as $field ) {
            if( preg_match('/([^:]+): (.+)/m', $field, $match) ) {
                $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
                if( isset($retVal[$match[1]]) ) {
                    $retVal[$match[1]] = array($retVal[$match[1]], $match[2]);
                } else {
                    $retVal[$match[1]] = trim($match[2]);
                }
            }
        }
        return $retVal;
    }
}
Она заполучает всю строку с 787 символов, и это то что нужно, но не могу разобрать код, нужно как в перврй функции чтобы я мог обращаться по ключам в масив, чтобы мог вывести любой заголовок.
Вот скрины:
Миниатюры
Немного переделать функцию   Немного переделать функцию  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.07.2017, 10:44
Ответы с готовыми решениями:

Как немного оптимизировать функцию?
Здравствуйте всем! Сейчас писал этот функцию для проекта но немного он не оптимизирован и работает медленнее... Как можно его немного...

Нужно переделать функцию
Всем привет ! Нужно переделать функцию full_stats , так что-бы вместо $answ1,$answ2,$answ3 ... она использовала аргументы с массива. ...

Переделать функцию из JavaScript в PHP
Мой Дядя программист! Вчера он сделал мне программу для вычисления суммы денег. Ну вы сами поймете вот вам код: function kredit(obg){ ...

2
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 17
11.07.2017, 10:50  [ТС]
Вот к примеру сама строка.
Миниатюры
Немного переделать функцию   Немного переделать функцию  
0
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 17
11.07.2017, 14:16  [ТС]
Кто не понял, что хочу зделать, обращайтесь, поясню.

Добавлено через 37 минут
Получаеться в первой функции, мы подтягиваем только первую строчку, а нужно как во второй подтягивать все строчки, которые пренадлежат этому заголовку.
Сам заголовок:

Content preview: ФПМГШМГИ уц атшщ уцатшц ауцт уцатшуцатцушта
вт фвт уцат щтвтц цута шатуцт уца ытсывта
ывоти ыоаываывибвыи ыва . вы аывга щырщаш
ыщаыа ыв.ва рыщарыщваыаж dshiufhius fhdeheifh ehf eh
adflsff sbf bsjbsfrbuf sbsjdbf herfybsfbdsjbfj dsfewb vfb jsbf dsjjf dsbjbyrbefsbj
gdjf +32549844981219 efewhfg bfyg wfu wfg f few +564798984 ewfjewfhein inwef
iewnfiuewnfewf. аоукашуташкуат ОГшоалмт уктт кптыатшт
тывл а тыат тавылат вшатшатув аи авцауотвылтпавп
пт уатавпвптвштаывт уга выта вытвпа ваптав
атцватукшптав вт птв твуащ ь. [...]

Есть идеи?

Добавлено через 1 час 34 минуты
https://stackoverflow.com/ques... 23#6368623
Может кому то поможет.

Добавлено через 17 минут
Остановился на этом варианте:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function http_parse_headers( $header ) {
    $retVal = array();
    $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header));
    foreach( $fields as $field ) {
        if( preg_match('/([^:]+): (.+)/m', $field, $match) ) {
            $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
            if( isset($retVal[$match[1]]) ) {
                if ( is_array( $retVal[$match[1]] ) ) {
                    $i = count($retVal[$match[1]]);
                    $retVal[$match[1]][$i] = $match[2];
                }
                else {
                    $retVal[$match[1]] = array($retVal[$match[1]], $match[2]);
                }
            } else {
                $retVal[$match[1]] = trim($match[2]);
            }
        }
    }
    return $retVal;
}
Заголовки не выводит, только их номер(( Так и обращаюсь по номеру элемента массива... Если кто то придумает как с первого кода сюда заголовки закинуть, был бы очень благодарен. А так пока буду работать с этим.

Добавлено через 52 минуты
Схитрил, зделал вот так:
PHP
1
2
3
4
if ( is_array( $retVal[$match[1]] ) ) {
                    $i = stristr($field,':', true);
                    $retVal[$match[1]][$i] = $match[2];
                }

Задание решено!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2017, 14:16
Помогаю со студенческими работами здесь

Переделать функцию согласно ООП
Здравствуйте. Вопрос скорее всего элементарный и решение очевидно, но мне не удалось самому с этим справиться при помощи гугла и...

Как переделать функцию для корректной работы?
Всем доброе утро! У меня есть код для замени текста: $string = &quot;raptor editor является редактором с открытым исходным кодом javascript...

Нужно немного переделать функцию
Нужно чтобы не переворачивала список и кто может пояснить как она работает а то не совсем понятно (defun remove-eventh (w &amp;optional...

немного переделать
Нужна помощь, срочно! Переделать программу unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...

Переделать немного
Доброе время суток. Есть программа которая определяет сумму двух матриц. Нужно переделать то бы она была в динамических данных (указатель...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru