Функция str_split
Функция str_split разбивает строку в массив. Первым параметром она принимает строку, а вторым — количество символов в элементе массива. К примеру, если второй параметр задать как 3 — функция разобьет строку в массив так, чтобы в каждом элементе массива было по 3 символа.
Синтаксис
str_split(строка, количество символов в элементе массива);
Пример
Давайте разобьем строку по 2 символа в элементе массива (обратите внимание на то, что последнему элементу не хватило символов и там их не 2 , а один):
Результат выполнения кода:
Пример
Давайте разобьем строку по 3 символа в элементе массива:
Результат выполнения кода:
Пример . Применение
Давайте найдем сумму цифр числа. Для этого разобьем число в массив с помощью str_split и сложим элементы этого массива с помощью array_sum :
Результат выполнения кода:
Смотрите также
- функцию explode ,
которая разбивает строку в массив по заданному разделителю
Преобразование объекта в массив в PHP
В этой статье показано, как преобразовать объект в массив в PHP.
1. Использование приведения типов
Простым вариантом преобразования объекта в ассоциативный массив является приведение типов. Чтобы привести объект к массиву, вы можете просто указать тип массива в круглых скобках перед объектом для преобразования. Когда объект PHP преобразуется в ассоциативный массив, все свойства объекта становятся элементами массива. Например, следующее решение отбрасывает StdClass объект в массив:
$obj = new StdClass ;
$array = ( array ) $obj ;
var_export ( $array ) ;
Следующее решение приводит объект, имеющий только общедоступные свойства.
class Point
public $x , $y ;
public function __construct ( )
$this -> x = 0 ;
$this -> y = 0 ;
$array = ( array ) new Point ;
var_export ( $array ) ;
Как видно из приведенных выше примеров, приведение типов хорошо работает с StdClass и класс для всех общедоступных свойств. Если ваш объект содержит какие-либо закрытые поля, ключи массива будут включать область видимости. Частные и защищенные свойства будут иметь имя класса и ‘*’ перед именем элемента соответственно. Обратите внимание, что имя класса и ‘*’ разделены нулевым символом ( «\0» ) с обеих сторон, как показано ниже:
class Point
protected $y ;
public function __construct ( )
$this -> x = 0 ;
$this -> y = 0 ;
$this -> z = 0 ;
$array = ( array ) new Point ;
var_export ( $array ) ;
» . «\0» . ‘*’ . «\0″ . ‘у’ => 0,
» . «\0» . ‘Точка’ . «\0» . ‘г’ => 0,
2. Использование get_object_vars() функция
В качестве альтернативы вы можете использовать get_object_vars() функция для получения ассоциативного массива доступных нестатических свойств указанного объекта в соответствии с областью действия. Обратите внимание, что приватные и защищенные свойства в объекте будут игнорироваться, если эта функция вызывается из области действия объекта.
$obj = new StdClass ;
$array = get_object_vars ( $obj ) ;
var_export ( $array ) ;
3. Использование отражения
Вы можете использовать Reflection для доступа к закрытым и защищенным полям вне области действия объекта. В этом примере используется ReflectionClass::getProperties() для извлечения отраженных свойств и сохранения их в массиве. В отличие от приведения типов, это решение приводит к правильным именам ключей для непубличных полей. До PHP 8.1.0 вы должны вызывать ReflectionProperty::setAccessible() для обеспечения доступа к защищенной или частной собственности. Начиная с PHP 8.1.0 все свойства доступны по умолчанию.
Как превратить таблицу в массив (PHP)
Дано: Форма с полем типа textarea, в которое методом копипаста (Ctrl-C Ctrl-V) вставляется содержимое таблице Excell.
Нужно, превратить эти данные в двухмерный массив типа $arr[номер_строки][номер_ячейки].
Собственно, делалось это вот так. Т.е. дробим полученную строку по символам перевода каретки (\n), а то что раздробилось — дробим по символу табуляции (\t) и получаем массив $arr.
function tableToArray($textarea) < $arrtr = explode("\n", $textarea); foreach ($arrtr as $k =>$v) < $arr[$k] = explode("\t", $v); >return $arr; >
Ничто не предвещало беды, но, вмешался человеческий фактор. Кое-кто повадился ставить символы перевода каретки прямо в ячейках таблицы, и всё пошло по… лесу.
Пришлось усложнить алгоритм.
function tableToArray($textarea) < //Делаем проверку первой строки. По ней считаем количество колонок в таблице $prearrtr = explode("\n", $textarea); $tdcount = count(explode("\t", $prearrtr[0])) - 1; //Получаем номер последней ячейки для каждой строки $tabattr = explode("\t", $textarea); //Дробим данные по символу табуляции $forbiddenCharacters = "\/*?<>|+%!\n\r"; //Запрещённые символы $arr = []; $trnum = 0; $tdnum = 0; foreach ($tabattr as $v) < if ($tdnum < $tdcount) < //Если у нас не последняя ячейка $arr[$trnum][$tdnum] = preg_replace("/[$]/", '', $v); $tdnum++; >else< //Если ячейка последняя, то она содержит и первую ячейку следующей строки //Кроме того, и в первой и в последней ячейке могут быть ненужные переводы строк //Поэтому, бьём на массив, удаляем пустые ячейки, перенумеровываем. $finalv = array_values(array_diff(explode("\n", $v), array(''))); //Пишем последнюю ячейку $arr[$trnum][$tdnum] = preg_replace("/[$]/", '', $finalv[0]); $trnum++; $tdnum = 0; $arr[$trnum][$tdnum] = preg_replace("/[$]/", '', $finalv[1]); $tdnum++; > > return $arr; >
Если смотреть в код, то в принципе алгоритм понятен. Есть пара моментов, которые поясню отдельно.
Первая строка таблицы (шапка) — эталонная и её никто не правит. Поэтому, в ней нет символов переходов строк. По ней считаем количество столбцов в таблице.
Vitashy — 300 RUB Даша — 120 RUB Derek341 — 110 RUB Любовь — 100 RUB CoRRRn — 100 RUB Anna — 100 RUB Ольга — 50 RUB Владимир — 50 RUB Alex — 30 RUB Анатолий — 10 RUB Vitashy — 300 RUB Даша — 120 RUB Derek341 — 110 RUB Любовь — 100 RUB CoRRRn — 100 RUB Anna — 100 RUB Ольга — 50 RUB Владимир — 50 RUB Alex — 30 RUB Анатолий — 10 RUB
Дробим данные по табуляции и закидываем в массив $tabattr. Проблема в том, что последняя ячейка текущей строки сливается с первой ячейкой следующей и попадает в одну ячейку массива. Поэтому, дойдя до последней ячейки (по номеру $tdcount), я дроблю полученные данные по символу перевода каретки и получаю массив $finalv. Удаляю из $finalv пустые ячейки и перенумеровываю ключи.
Теперь, первую ячейку $finalv[0] загоняю в последнюю ячейку текущей строки массива таблицы, а вторую ячейку $finalv[1] закидываю в первую ячейку следующей строки.
А ещё, я чищу содержимое ячеек от символов, указанных в переменной $forbiddenCharacters. В т.ч. от символов перевода строки.
Собственно, на этом пока всё.
Напишите комментарий

Новый Топ10 спонсоров сайта
- Vitashy — 300 RUB
- Даша — 120 RUB
- Derek341 — 110 RUB
- Любовь — 100 RUB
- CoRRRn — 100 RUB
- Anna — 100 RUB
- Ольга — 50 RUB
- Владимир — 50 RUB
- Alex — 30 RUB
- Анатолий — 10 RUB

Alex Cube
- 19.11.2023: Первый-седьмой день 19 ноября 2023
Воскресение. Где-то это первый день недели, а где-то седьмой. Чтобы убрать эту неопределённость, пусть будет первым. День. Сходили с Эль в лес на прогулку. Вечер. Доделал корпус, спаял питающий кабель, допроектировал держалку (но печатать не стал, ибо поздновато), подключил, работает, смотрится годно. Весь день пытаюсь поработать, но почему-то не могу себя заставить. Кажется у меня […]
15:12 – I’m ON. Передо мной рабочий стол. На столе, среди целой кучи деталей под разные проекты, те самые часики-антидрыщ. С питанием часиков определился. Заказал питальник на 3А, чтобы подключить к нему целую колодку USB-разъёмов. Вообще, это был USB-хаб, но мне понадобилось запитать несколько устройств, и он стал аналогом сетевого фильтра. Проблема в том, что […]
Вечер. Пятница. Радуюсь ей, как уже давно не радовался. Эти два дня были забавными. Вчера не выспался: лёг поздно, голова весь день не соображала совсем, всё прошло как в тумане, даже отчётный созвон, на котором разбирали код автотестов и собирали пожелания по расширению их функционала. Я в этот день даже с Учебным Центром общался и […]