Как сделать матрицу php

Обновлено: 05.07.2024

Там причудливый PHP-способ транспонировать массив 2d:

EDIT Простой подход с использованием распаковки массивов PHP 5.6

С введением функции распаковки аргументов массива в PHP 5.6 мы можем еще более упростить это:

РЕДАКТИРОВАТЬ Объяснение

Цитата из документов PHP для функции array_map():

Интересным использованием этой функции является создание массива массивов, который можно легко выполнить, используя NULL в качестве имени функции обратного вызова

array_unshift($trans, null) , который мы выполняем в первую очередь, обеспечивает обратный вызов NULL, и мы используем call_user_func_array() , потому что мы не обязательно знаем, сколько значений есть в нашем массиве $trans . То, что мы делаем с помощью call_user_func_array() , эквивалентно:

для вашего массива примеров, потому что верхний уровень вашего 2-мерного массива имеет три элемента (клавиши 0, 1 и 2).

Эффективно этот обратный вызов NULL проходит через все массивы параллельно, беря каждое из них из очереди, чтобы построить новый массив:

Добрый день господа, мне нужно написать матрицу NxM представленную в скрипте в виде двумерного массива $a, после чего, мне нужно транспонировать матрицу $a и сохранит ее в переменной $b.
У меня получилось сделать так:

$a = array (
array (1, 2, 3, 6, 8, 9),
array (4, 7, 3, 3, 1, 5)
);

echo "\$arr = array (

array (1, 2, 3, 6, 8, 9)

array (4, 7, 3, 3, 1, 5)

array_unshift ($a, null);
$a = call_user_func_array("array_map", $a);

Хотел бы у вас спросить насколько это похоже на матрицу?
И как это можно транспортировать в переменную $b?


Трезвый :
12 лет, 5 месяцев, 4 дня

Добрый вечер форумчане, мне нужно сделать матрицу, в виде двумерного массива, нашел такое решение:

$a = array (
array (1, 2, 3, 6, 8, 9),
array (4, 7, 3, 3, 1, 5)
);

echo "\$arr = array (

array (1, 2, 3, 6, 8, 9)

array (4, 7, 3, 3, 1, 5)

array_unshift ($a, null);
$a = call_user_func_array("array_map", $a);

Хотел бы у вас спросить насколько это похоже на матрицу?
Так как мне это не очень ее напоминает)
И как это можно транспортировать в переменную $b?

Присоединённое изображение

Присоединённое изображение

А как ты его объяснять будешь преподавателю, вот мне даже интересно? )))

Правильно, не ври! )) Этот код явно писал человек с огромным опытом. Очень любопытный подход. Говори, кто его написал? Где взял? ))


Трезвый :
12 лет, 5 месяцев, 4 дня


Трезвый :
12 лет, 5 месяцев, 4 дня



Трезвый :
12 лет, 5 месяцев, 4 дня

Цитата
даам, тебя это уж точно не с самой профессиональной стороны показывает.


забавно читать такое от людей, о существовании которых я даже не догадывался до сегодняшнего вечера
Кстати, "это" - это что именно?

Invis1ble
Под этим я подразумиваю, что у тебя стаж на этом форуме 4 года, и нормальный человек, написал бы мне, "дружище, тебе надо сделать то, то и то, и кстати, я как опытный кодер вижу, что этот код ты откуда то спер, а не написал его сам, так что не надо врать, это не хорошо" а ты превратил это в цирк, просто что бы поржать, именно поэтому у меня сформулировалось впечатление, что ты не профессионал.


Трезвый :
12 лет, 5 месяцев, 4 дня

Я верю в саморегуляцию. Если не помогать привирающим лентяям, то они уйдут из профессии, ибо толку от них станет 0.
Стаж на форуме только усиливает негативную реакцию при виде подобных тем, вплоть до определенного момента. После которого такие темы начинаю не бесить, а веселить

Invis1ble
Это твое дело, но я уверен, что через пару лет, из меня получится программист намного лучше чем из тебя, в этом я уверен, так как не планирую сидеть на форумах и рассказывать молодым начинающим кодерам какие они бездарные, а вот ты я уверен, этим будешь продолжать заниматься на ура, так что пацан, удачки тебе, я зла на тебя не держу, ибо дураков не слушаю.


Трезвый :
12 лет, 5 месяцев, 4 дня

Для меня одно остается загадкой (хотя есть предположения):
Как ты собрал рабочий скрипт по кусочкам, при этом не зная элементарной операции присвоения? Тут даже язык не важен практически, эта операция во многих ЯП выглядит одинаково.

Подписаться на тему
Уведомление на e-mail об ответах в тему, во время Вашего отсутствия на форуме.

С введением функции распаковки аргументов массива в PHP 5.6 мы можем упростить это еще больше:

РЕДАКТИРОВАТЬ объяснение

Цитирование из документации PHP для функция array_map () :

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

(См. Пример № 4 на этой странице документации для примера того, что это делает)

array_unshift($trans, null) что мы выполняем в первую очередь, обеспечивает обратный вызов NULL, и мы используем call_user_func_array() потому что мы не обязательно знаем, сколько ценностей в нашем $trans массив. Что мы делаем, используя это call_user_func_array() является эквивалентом:

для вашего примера массива, потому что верхний уровень вашего 2-го массива имеет три элемента (ключи 0, 1 и 2).

По сути, этот обратный вызов NULL циклически проходит по всем массивам параллельно, беря каждое значение из них по очереди для создания нового массива:

Там есть пара дополнительных проверок

  • его не волнует, являются ли ваши массивы ассоциативными или перечисляются в любом измерении, потому что он обращается к $i элемент, а не индекс
  • Если под-массивы не имеют одинаковую длину, тогда эффективные дополнения к более коротким под-массивам будут иметь нулевые значения, чтобы соответствовать длине самого длинного
  • Неважно, сколько массивов вы передадите, все они будут работать параллельно

Другие решения

Я считаю, что это работает и с прямоугольными массивами.
Трюк: return array_map(null, . $squareArray); кажется, работает неожиданным образом для одного столбца массива

Есть причудливый PHP-способ транспонирования массива 2d:

EDIT Более простой подход с использованием распаковки массива PHP 5.6

С введением функции распаковки аргументов массива в PHP 5.6 мы можем еще более упростить это:

EDIT Пояснение

Цитирование из документов PHP для функции array_map () :

Интересным использованием этой функции является создание массива массивов, который можно легко выполнить, используя NULL в качестве имени функции обратного вызова

(См. Пример № 4 на этой странице документации для примера того, что это делает)

call_user_func_array() array_unshift($trans, null) , обеспечивающий обратный вызов NULL, и мы используем call_user_func_array() потому что мы не обязательно знаем, сколько значений существует в нашем массиве $trans . То, что мы делаем с использованием этого call_user_func_array() эквивалентно:

для вашего массива примеров, потому что верхний уровень вашего 2-мерного массива имеет три элемента (клавиши 0, 1 и 2).

Эффективно этот обратный вызов NULL циклически проходит через все массивы параллельно, беря каждое из них из очереди, чтобы построить новый массив:

Читайте также: