php:在字符串中转换数组

时间:2013-07-04 08:35:23

标签: php arrays string foreach warnings

我试图使函数con转换为字符串值中的数组,代码为:

function makestring($array)
  {
  $outval = '';
  foreach($array as $key=>$value)
    {
    if(is_array($value))
      {
      $outval .= makestring($value);
      }
    else
      {
      $outval .= $value;
      }
    }
  return $outval;
  }

但我收到此错误:警告:为foreach()提供的参数无效。有人可以帮帮我吗?

8 个答案:

答案 0 :(得分:1)

function makestring($array)
{
    if(is_array( $array )) {
        $outval = '';
        foreach($array as $key=>$value)
        {
            if(is_array($value))
            {
                $outval .= makestring($value);
            }
            else
            {
                $outval .= $value;
            }
        }
        return $outval;
    } else {
        die("Supplied argument is not an array");
    }
}
OR 
function makestring( array $array)
{
    // you code goes here
}

试试这个。在使用array

之前,您需要检查传递参数是否为foreach

答案 1 :(得分:1)

recursive implode()将多维数组转换为字符串

function mYimplode($array, $delimeter) {
 $result='';
 foreach ($array as $key) {
    if (is_array($key)) {
        $result .= mYimplode($key, $delimeter) . $delimeter;
    } else {
        $result .= $key . $delimeter;
    }
 }

 $result = substr($result, 0, 0-strlen($delimeter));

 return $result;
}

答案 2 :(得分:0)

为防止foreach中出现错误,最好将type设置为variable:

foreach((array)$someArray as $data) {

即使$ someArray不是数组,也不会出现任何错误。

答案 3 :(得分:0)

→试试这个:

  function makestring($array)
  {
       $outval = '';
       $keys = array_keys( $array );

       for( $x = 0; $x < count( $array ); $x++ )
       {
            if( is_array( $array[ $keys[ $x ] ] ) )
            {
                 $outval .= makestring( $array[ $keys[ $x ] ] );
            }
            else
            {
                 $outval .= $array[ $keys[ $x ] ];
            }
       }
  return $outval;
  }

答案 4 :(得分:0)

也许你使用$ key和$ value的变量中包含旧数据,通常在foreach结束时取消设置($ key,$ value)将会解决这个问题

答案 5 :(得分:0)

$array = array(
    '1',
    '2',
    '3',
    array(
        '4',
        '5',
        array(
            '6',
            '7'
        )
    )
);
$output = null;
if(!is_array($array)){
    $array = array($array);
}
// use a reference to the $output in the callback
array_walk_recursive($array, function($array_element) use (&$output){
    if(is_object($array_element) and method_exists($array_element, '__toString')){
        $array_element = strval($array_element);
    }
    if(is_scalar($array_element)){
        $output .= $array_element;
    }else{
        // found a non scalar... handle it! :)
    }
});
echo $output;

检查一下。

答案 6 :(得分:0)

array_walk_recursive((array) $array, function($val, $key) {
  global $result;
  $result .= $val;
});

答案 7 :(得分:0)

您通过

查看
if(is_array($value))
{
  $outval .= makestring($value);
}

是否递归调用makestring()。但是,在首先输入makestring()的代码中,您不会进行此类检查。没关系,但是你必须检查makestring(),你是否真的从调用者那里获得了一个数组。这就是所谓的防御性编程。

另一种选择是在主叫方面进行检查。这是Design By Contract™的一部分:

$var = i_usually_give_you_an_array_but_i_might_also_fail();
if (is_array($var)) {
  echo makestring($value);
}