尝试运行串联方法时,不断获取“数组到字符串的转换”错误

时间:2019-04-09 14:16:06

标签: php laravel laravel-5

因此,我正在解决一个问题,该问题需要将值数组转换为字符串,以便可以将其显示为excel文档。但是,当我尝试运行导出时,仍然不断收到“数组到字符串转换”错误。代码是

$counties = "";
if(isset($forms->form_info['county'])){
  for($i = 0; $i < count($forms->form_info['county']); $i++){
    if(is_int($i / 10) && $i != 0){
      $counties .= $forms->form_info['county'][$i] . ",\n";
    } elseif($i == (count($forms->form_info['county']) - 1)) {
      // Keep getting the error on the line below
      $counties .= $forms->form_info['county'][$i] . " ";
    } else {
      $counties .= $forms->form_info['county'][$i] . ", ";
    }
  }
}

我已经在县以及要使用的表单元素上完成了一个gettype的dd操作,并且都以字符串形式出现,所以我迷失了要转换的数组的位置。我试过将$ form-> form_info ['county'] [$ i]放入其自己的变量中,并将其连接到counties变量中,但是遇到了同样的问题。

dd($ forms-> form_info ['county'] [$ i])的结果;是

"Bernalillo County"

dd($ forms-> form_info ['county'])的结果;是

array:1 [▼
   0 => "Bernalillo County"
]

dd的结果(var_dump($ forms-> form_info ['county'] [$ i]));是

string(17) "Bernalillo County"
null

这是问题的直接屏幕截图

Php error screen

3 个答案:

答案 0 :(得分:1)

显然,数据不是您期望的,但是此代码对于您要执行的操作非常冗长:用逗号分隔数组值,在每十个元素后放置一个换行符。我们可以使用array_chunk轻松做到这一点。

<?php
$data = str_split("abcdefghijklmnopqrstuvwxyz");
$output = "";

foreach(array_chunk($data, 10) as $v) {
    $output .= implode(", ", $v) . ",\n";
}
// get rid of that final comma space
echo substr($output, 0, -2);

输出:

a, b, c, d, e, f, g, h, i, j,
k, l, m, n, o, p, q, r, s, t,
u, v, w, x, y, z

适应您的代码:

$counties = "";
if(isset($forms->form_info['county'])){
    foreach(array_chunk($forms->form_info['county'], 10) as $v) {
        $counties .= implode(", ", $v) . ",\n";
    }
    $counties = substr($counties, 0, -2);
}

答案 1 :(得分:0)

请向miken32致谢,他的解决方案可以帮助我实现大部分目标。修复来自一个简单的if语句,该语句在foreach之前被检查。因此解决方案最终是:

{{1}}

但是该函数失败的真正原因是,我一直在使用的数据被转换为数组(爆炸),而不仅仅是爆炸,因此它实际上是多维数组。

答案 2 :(得分:-1)

如果我很了解这一点,那么您会期望从$forms->form_info['county']中获得一个数组吗?

如果是这种情况,请使用implode

您的代码应为:

if(isset($forms->form_info['county']) && is_array($forms->form_info['county'])){
   $countries = implode(",", $forms->form_info['county']);
}