Intereting Posts
Как передать переменное количество параметров функции в PHP Заполнять флажки в соответствии с количеством массивов как настроить веб-сервер xampp для разных корневых каталогов Как запустить PHP-код в Java-приложении? Действие и передача переменной для всех действий в symfony 1.4 не удалось сохранить одно изображение вместе с несколькими изображениями в codeigniter Границы ячеек не печатаются (кроме 1-й страницы), когда таблица охватывает несколько страниц в Firefox Можно ли использовать MySQLi и PDO? Могу ли я использовать переменную для вызова метода? Загрузите и прочитайте файл csv с помощью php Проблема с strpos в PHP PHP не распознается как внутренняя или внешняя команда в командной строке Переопределение статических членов в производных классах в PHP Использование простых примеров абстрактного класса в реальном мире Как обновить базу данных mysql без перезагрузки страницы

Многомерный массив в строку

Я пытаюсь преобразовать многомерный массив в строку с определенным форматом.

function convert_multi_array($array) { foreach($array as $value) { if(count($value) > 1) { $array = implode("~", $value); } $array = implode("&", $value); } print_r($array); } $arr = array(array("blue", "red", "green"), array("one", "three", "twenty")); convert_multi_array($arr); 

Должен выходить: blue~red~green&one~three~twenty … и т. Д. Для большего количества подматриц.

Позвольте мне сказать, что я не смог создать какой-либо код, который удаленно близок к результатам, которые я хочу. Через два часа это в значительной степени лучшее, что я могу получить. Я не знаю, почему импланты действуют иначе, чем обычно для струн, или, может быть, я просто не смотрю на это правильно. Можете ли вы использовать implode для значений массивов?

Вы переписываете $array , который содержит исходный массив. Но в foreach копируется $array , поэтому вы просто назначаете новую переменную.

То, что вам нужно сделать, – это перебрать дочерние массивы и «преобразовать» их в строки, а затем взорвать результат.

 function convert_multi_array($array) { $out = implode("&",array_map(function($a) {return implode("~",$a);},$array)); print_r($out); } 

Посмотрите на мою версию. Он разрушает любое измерение:

 function implode_all($glue, $arr){ for ($i=0; $i<count($arr); $i++) { if (@is_array($arr[$i])) $arr[$i] = implode_all ($glue, $arr[$i]); } return implode($glue, $arr); } 

Вот пример:

 echo implode_all(',', array( 1, 2, array('31','32'), array('4'), array( array(511,512), array(521,522,523,524), 53)) ); 

Будет печать:

 1,2,31,32,4,511,512,521,522,523,524,53 

Сохранение вложенных внутренних массивов в массив. Затем их разлагают.

(написано в духе вашей первоначальной реализации)

 function convert_multi_array($arrays) { $imploded = array(); foreach($arrays as $array) { $imploded[] = implode('~', $array); } return implode("&", $imploded); } 

Вы также можете просто взять оригинальную реализацию из руководства по подключению PHP ( http://php.net/manual/en/function.join.php )

 function joinr($join, $value, $lvl=0) { if (!is_array($join)) return joinr(array($join), $value, $lvl); $res = array(); if (is_array($value)&&sizeof($value)&&is_array(current($value))) { // Is value are array of sub-arrays? foreach($value as $val) $res[] = joinr($join, $val, $lvl+1); } elseif(is_array($value)) { $res = $value; } else $res[] = $value; return join(isset($join[$lvl])?$join[$lvl]:"", $res); } $arr = array(array("blue", "red", "green"), array("one", "three", "twenty")); joinr(array("&", "~"), $arr); 

Это рекурсивно, поэтому вы даже можете сделать

 $arr = array(array("a", "b"), array(array("c", "d"), array("e", "f")), "g"); joinr(array("/", "-", "+"), $arr); 

и вы получите

 ab/c+d-e+f/g 

Вот простой ответ:

  function implode_recur ($separator, $arrayvar){ $output = ""; foreach ($arrayvar as $av) { if (is_array ($av)) { $output .= implode_r ($separator, $av); } else { $output .= $separator.$av; } return $output; } } $result = implode_recur(">>",$variable); 

Хорошо, счастливое кодирование!

Может не представлять интереса, но мне нужно было сообщить о вложенном массиве, содержащем ошибки, поэтому я просто определил переменную, а затем с json_encode поместил это в свой адрес электронной почты. Один из способов преобразования массива в строку.