13

我正在尝试将多维数组转换为具有特定格式的字符串。

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...等等更多的子数组。

我只想说,我无法生成任何接近我想要的结果的代码。两个小时后,这几乎是我能得到的最好的。我不知道为什么内爆的行为与通常对字符串的行为不同,或者我可能只是看不正确。你能对数组值使用内爆吗?

4

9 回答 9

20

您正在覆盖$array,其中包含原始数组。但是在foreach一个副本$array正在处理中,所以你基本上只是分配一个新变量。

您应该做的是遍历子数组并将它们“转换”为字符串,然后将结果内爆。

function convert_multi_array($array) {
  $out = implode("&",array_map(function($a) {return implode("~",$a);},$array));
  print_r($out);
}
于 2012-09-06T22:05:48.577 回答
7

看我的版本。它内爆任何维度:

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
于 2016-02-26T08:17:48.027 回答
2

这是一个简单的答案:

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

好的,快乐的编码!

于 2015-11-18T13:28:10.943 回答
1

将内爆的内部数组保存到数组中。然后内爆那些。

(本着您原始实现的精神编写)

function convert_multi_array($arrays)
{
    $imploded = array();
    foreach($arrays as $array) {
        $imploded[] = implode('~', $array);
    }
    return implode("&", $imploded);
}
于 2012-09-06T22:07:24.553 回答
1

可能没有兴趣,但我需要报告一个包含错误的嵌套数组,所以我简单地定义了一个变量,然后使用 json_encode 将其放入我的电子邮件中。将数组转换为字符串的一种方法。

于 2017-03-08T12:39:41.493 回答
1

我尝试了一堆这些,但没有一个为我勾选了所有框。最后一个是Jeff_Alieffsons

这是一个调整后的版本,您可以将任何多维数组放入其中,然后它会返回一个字符串。

function implode_all( $glue, $arr ){
  if( is_array( $arr ) ){

    foreach( $arr as $key => &$value ){

      if( @is_array( $value ) ){
        $arr[ $key ] = implode_all( $glue, $value );
      }
    }

    return implode( $glue, $arr );
  }

  // Not array
  return $arr;
}
于 2021-05-28T09:57:52.237 回答
0

您也可以从 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);

你会得到

a-b/c+d-e+f/g
于 2012-09-06T22:17:03.890 回答
0

您可以使用这一行数组来字符串代码:

$output = implode(", ",array_map(function($a) { return '<a href="'.$a['slug'].'">'.$a['name'].'</a>'; }, $your_array) );

print_r($output);

输出:

链接1、链接2、链接3

于 2018-02-06T11:27:29.767 回答
0

如果有人需要一个safe general function可以支持添加的二维数组(如表格),keys name我认为这个可以很好:

function arystr($ary='',$key=false,$rowsep=PHP_EOL,$cellsep=';') { // The two dimensional array, add keys name or not, Row separator, Cell Separator
    $str='';
    if (!is_array($ary)) {
        $str=strval($ary);
    } else if (count($ary)) {
        foreach ($ary as $k=>$t) {
            $str.=($key ? $k.$cellsep : '').(is_array($t) ? implode($cellsep,$t) : $t);
            end($ary);
            if ($k !== key($ary)) $str.=$rowsep;
        }
    }
    return $str;
}
  • 我将其用作Array To CSV String函数

所以如果我们的输入是这样的:

$a=array(array("blue", "red", "green"), array("one", "three", "twenty"));
echo arystr($a);

结果将是:

blue;red;green
one;three;twenty

另一个内爆键的例子:

$a = array(
  'first' => array
  (
    'a' , 'b'
  ),
  'second' => array
  (
    'c','d'
  ),
  'third' => array
  (
    'e','f'
  )
);
echo arystr($a,true,'|',',');

结果 :

first,a,b|second,c,d|third,e,f
于 2021-01-05T14:24:23.067 回答