Продолжать получать ошибку «Преобразование массива в строку» при попытке запустить метод конкатенации - PullRequest
1 голос
/ 09 апреля 2019

Итак, я работаю над проблемой, когда мне нужно преобразовать массив значений в строку, чтобы он мог отображаться для документа 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] . ", ";
    }
  }
}

Я сделал dd для gettype для округов, а также для элемента формы, который я пытаюсь использовать, и оба появились в виде строк, поэтому я заблудился, где находится предполагаемый массив, который преобразуется. Я попытался преобразовать $ form-> form_info ['county'] [$ i] в собственную переменную и объединить ее с переменной countties, но получил ту же проблему.

Результат 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 ]

1 голос
/ 09 апреля 2019

Очевидно, что данные не соответствуют вашим ожиданиям, но этот код очень многословен для того, что вы пытаетесь сделать: разделяйте значения массива запятыми, ставя разрыв строки после каждого десятого элемента. Мы можем сделать это легко с использованием 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);
}
0 голосов
/ 09 апреля 2019

Благодарю miken32 за его решение, которое поможет мне в этом. Исправление пришло из простого оператора if, который проверяется перед foreach. Таким образом, решение оказалось:

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

Но настоящая причина сбоя функции заключалась в том, что используемые мной данные были преобразованы как массив (разнесение), а не просто разнесение, так что это был фактически многомерный массив.

0 голосов
/ 09 апреля 2019

Если я хорошо понимаю, вы ожидаете массив от $forms->form_info['county']?

в этом случае используйте взорваться

Ваш код будет:

if(isset($forms->form_info['county']) && is_array($forms->form_info['county'])){
   $countries = implode(",", $forms->form_info['county']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...