Как строку превратить в массив php
Перейти к содержимому

Как строку превратить в массив php

  • автор:

Функция 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 спонсоров сайта

  1. Vitashy — 300 RUB
  2. Даша — 120 RUB
  3. Derek341 — 110 RUB
  4. Любовь — 100 RUB
  5. CoRRRn — 100 RUB
  6. Anna — 100 RUB
  7. Ольга — 50 RUB
  8. Владимир — 50 RUB
  9. Alex — 30 RUB
  10. Анатолий — 10 RUB

#антидрыщ

Alex Cube

  • 19.11.2023: Первый-седьмой день 19 ноября 2023

Воскресение. Где-то это первый день недели, а где-то седьмой. Чтобы убрать эту неопределённость, пусть будет первым. День. Сходили с Эль в лес на прогулку. Вечер. Доделал корпус, спаял питающий кабель, допроектировал держалку (но печатать не стал, ибо поздновато), подключил, работает, смотрится годно. Весь день пытаюсь поработать, но почему-то не могу себя заставить. Кажется у меня […]

15:12 – I’m ON. Передо мной рабочий стол. На столе, среди целой кучи деталей под разные проекты, те самые часики-антидрыщ. С питанием часиков определился. Заказал питальник на 3А, чтобы подключить к нему целую колодку USB-разъёмов. Вообще, это был USB-хаб, но мне понадобилось запитать несколько устройств, и он стал аналогом сетевого фильтра. Проблема в том, что […]

Вечер. Пятница. Радуюсь ей, как уже давно не радовался. Эти два дня были забавными. Вчера не выспался: лёг поздно, голова весь день не соображала совсем, всё прошло как в тумане, даже отчётный созвон, на котором разбирали код автотестов и собирали пожелания по расширению их функционала. Я в этот день даже с Учебным Центром общался и […]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *