我试图使函数con转换为字符串值中的数组,代码为:
function makestring($array)
{
$outval = '';
foreach($array as $key=>$value)
{
if(is_array($value))
{
$outval .= makestring($value);
}
else
{
$outval .= $value;
}
}
return $outval;
}
但我收到此错误:警告:为foreach()提供的参数无效。有人可以帮帮我吗?
答案 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);
}