Многомерный массив PHP Implode

Что касается моей структуры данных, у меня есть массив сообщений, каждый из которых сам message_id содержит три части информации: id, score и content.

Я хочу взорвать этот массив, чтобы получить список идентификаторов, разделенных запятыми, и как это сделать?

Обновление для PHP 5.5

PHP 5.5 представляет array_column который является удобным ярлыком для всего класса использования array_map ; он также применим здесь.

 $ids = array_column($communications, 'id'); $output = implode(',', $ids); 

Оригинальный ответ

Вам нужно сделать массив только идентификаторов из вашего массива сообщений. Тогда implode будет тривиальным.

Подсказка: функция для этого – array_map .

Решение:

Предполагает PHP 5.3, иначе вам придется писать обратный вызов в виде строки.

 $ids = array_map(function($item) { return $item['id']; }, $communications); $output = implode(',', $ids); 

Вы можете посмотреть на функцию array_walk_recursive . Это рабочий фрагмент создания рекурсивного массива для преобразования строк:

 $array = array( "1" => "PHP code tester Sandbox Online", "foo" => "bar", 5 , 5 => 89009, "case" => "Random Stuff", "test" => array( "test" => "test221", "test2" => "testitem" ), "PHP Version" => phpversion() ); $string=""; $callback = function ($value, $key) use (&$string) { $string .= $key . " = " . $value . "\n"; }; array_walk_recursive($array, $callback); echo $string; ## 1 = PHP code tester Sandbox Online ## foo = bar ## 2 = 5 ## 5 = 89009 ## case = Random Stuff ## test = test221 ## test2 = testitem ## PHP Version = 7.1.3 

Из http://snipplr.com/view.php?codeview&id=10187 :

 class Format { static public function arr_to_csv_line($arr) { $line = array(); foreach ($arr as $v) { $line[] = is_array($v) ? self::arr_to_csv_line($v) : '"' . str_replace('"', '""', $v) . '"'; } return implode(",", $line); } static public function arr_to_csv($arr) { $lines = array(); foreach ($arr as $v) { $lines[] = self::arr_to_csv_line($v); } return implode("\n", $lines); } } 

Для всех, кто ищет ответ, это то, что я смог сделать:

 $singleDimensionalArray = array(); foreach($array["1"]["2"]["3"][...] as $value) { $singleDimensionalArray[] = $value; } 

Я использовал это с 3-мерным массивом.

этот комментарий основан на решении @jon, просто добавьте функциональный кодовый блок

но я должен использовать цикл, потому что array_map не принимает второй параметр

 function array_column_implode($data_array = array(),$key = 'id', $delimiter = ',') { if (function_exists('array_column')) { return implode($delimiter, array_column($data_array, $key)); } else { $new_data_array = array(); foreach ($data_array as $value) { if (isset($value[$key])) { $new_data_array[] = $value[$key]; } } return implode($delimiter, $new_data_array); } }