Multidimensional Array PHP Implode

Em termos de minha estrutura de dados, tenho uma variedade de comunicações, com cada comunicado de comunicação contendo três informações: id, score e conteúdo.

Quero implodir esta matriz para obter uma lista separada de vírgulas de ids, como faço isso?

Atualização para PHP 5.5

O PHP 5.5 apresenta array_column que é um atalho conveniente para uma class inteira de uso de array_map ; também é aplicável aqui.

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

Resposta original

Você precisa fazer uma série de apenas ids fora de sua matriz de comunicações. Então, a implosão seria trivial.

Dica: a function para isso é array_map .

Solução:

Assume PHP 5.3, caso contrário, você precisará escrever o retorno de chamada como uma string.

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

Você pode dar uma olhada na function array_walk_recursive . Este é um trecho de trabalho de criação de matriz recursiva para conversão de seqüência:

 $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 

De 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); } } 

Para quem procura uma resposta, é isso que eu consegui fazer:

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

Eu usei isso com uma matriz tridimensional.

Este comentário baseado na solução @jon, basta adicionar bloco de código funcional

mas eu tenho que usar loop porque array_map não aceita o segundo parâmetro

 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); } } 
    Intereting Posts