Intereting Posts
PHP 5.4 PDO не удалось подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию Таблица ссылок Doctrine 2 и Many-to-many с дополнительным полем Как вы создаете строку безопасности в PHP? Поверните PNG, затем сохраните с помощью прозрачности изображения Добавление разных случайных чисел в URL-адрес в массиве Javascript на каждом цикле Почему Open Graph Built-In Как не работает больше? Как подсчитать, сколько врачей забронировано каждым пациентом? Как включить функции WordPress в пользовательский .php-файл? удаление пароля из закрытого ключа rsa Является ли это безопасным способом фильтрации данных и предотвращения SQL-инъекций и других атак? Производительность PHP file_get_contents () vs readfile () и cat JavaScript QR Code Reader – можно ли это сделать? Или, удаленный сервис? Доктрина 2: результат запроса как ассоциативный массив Ограничить длину строки Как сделать PHP-неэтериализацию jQuery-сериализованной формы?

создать транспонированную матрицу с помощью php

Например, если матрица:

1 2 3 4 5 6 

Тогда транспонирование над матрицей будет:

 1 3 5 2 4 6 

Это мой текущий код:

 <?php // transpose matrix $trans = array( array(1, 2), array(3, 4), array(5, 6) ); foreach ($trans as $key => $val){ foreach ($trans[$key] as $k => $v){ echo $v; } } ?> 

Related of "создать транспонированную матрицу с помощью php"

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

 $trans = array( array(1, 2), array(3, 4), array(5, 6) ); array_unshift($trans, null); $trans = call_user_func_array('array_map', $trans); var_dump($trans); 

демонстрация

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

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

 $trans = array( array(1, 2), array(3, 4), array(5, 6) ); $trans = array_map(null, ...$trans); var_dump($trans); 

EDIT Пояснение

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

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

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

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

 $trans = array_map(NULL, $trans[0], $trans[1], $trans[2]); 

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

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

 $maxArraySize = max(count($array[0], $array[1], $array[2]); // $maxArraySize will have a value of 2 in your case, // because your sub-arrays are all equal size $newArray = []; for($i = 0; $i < $maxArraySize; ++$i) { $tmpArray = []; $tmpArray[] = $array[0][$i]; $tmpArray[] = $array[1][$i]; $tmpArray[] = $array[2][$i]; $newArray[] = $tmpArray[]; } 

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

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