Multidimensional Array PHP Implode

前端 未结 5 737
梦如初夏
梦如初夏 2020-12-02 17:48

In terms of my data structure, I have an array of communications, with each communications_id itself containing three pieces of information: id, score, and content.

相关标签:
5条回答
  • 2020-12-02 17:59

    this comment based on @jon solution , just add functional code block

    but i have to use loop because array_map does not accept second parameter

    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);
      }
    }
    
    0 讨论(0)
  • 2020-12-02 18:01

    From 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);
        }
    
    }
    
    0 讨论(0)
  • 2020-12-02 18:02

    You can have a look to array_walk_recursive function . This is a working snippet of creating of recursive array to string conversion :

    $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
    
    0 讨论(0)
  • 2020-12-02 18:04

    Update for PHP 5.5

    PHP 5.5 introduces array_column which is a convenient shortcut to a whole class of array_map usage; it is also applicable here.

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

    Original answer

    You need to make an array of just ids out of your array of communications. Then the implode would be trivial.

    Hint: the function for that is array_map.

    Solution:

    Assumes PHP 5.3, otherwise you 'd have to write the callback as a string.

    $ids = array_map(function($item) { return $item['id']; }, $communications);
    $output = implode(',', $ids);
    
    0 讨论(0)
  • 2020-12-02 18:05

    For anyone else looking for an answer, this is what I was able to do:

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

    I used this with a 3-dimensional array.

    0 讨论(0)
提交回复
热议问题