json_encode возвращает ноль из массива php

0

У меня есть массив в php от recursiveiteratoriterator, он загружается отлично, когда я дамп файла. Когда я пытаюсь выполнить json_encode и передаю его в браузер, я получаю 2 сценария:

Я повторяю кодировку json_ и получаю следующее:

["\/var\/www\/html\/dev\/workspace\/ftpscript\/test\/10MB.zip",
"\/var\/www\/html\/dev\/workspace\/ftpscript\/test\/test.php"]null

Если я назову его из удаленного PHP-скрипта (используя 2 сервера, источник (где есть скрипт) и тот, кто берет информацию и обрабатывает его) с удаленного сервера и json_decode, это дает эхо:

NULL

Сценарий:

$files = array();
    $startpath = getcwd()."/test/";
    $fileinfos = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($startpath)
    );
    foreach($fileinfos as $pathname => $fileinfo) {
        if (!$fileinfo->isFile()) continue;{
        $files[] .= $pathname;
        }
    }
    $utfEncoded = array_map("utf8_encode", $files );
    echo json_encode($utfEncoded);

Я пробовал с и без кодирования, и он дает тот же результат. Я что-то упускаю? Если это имеет значение, я запускаю php 5.4.38 на apache.

Редактировать:

Я немного изменил iteraor и все равно получаю те же результаты... У меня теперь есть:

function ft_srcscan() {
    $path = getcwd();
    $directory = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
    $iterator = new RecursiveIteratorIterator($directory);
    $files = array();
    foreach ($iterator as $info) {
        $files[$info->getPathname()] = $info->getSize();
    }
    echo json_encode($files);
}

Когда я помещаю тот же самый итератор на тестовую страницу сам по себе вместе с кодировкой, я получаю результаты здесь

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

  • 0
    Что вы думаете, if(...)continue;{...} сделает? Он делает что-то, что может быть намечено, но это довольно нетрадиционно и его легко понять неправильно.
  • 0
    В контексте итератора он переходит к следующей итерации, если элемент не является файлом. Поправьте меня, если я ошибаюсь, пожалуйста, это только второй раз, когда я использовал один из них, и это были месяцы (мой предыдущий вопрос). Я просто знаю, что в php выводит массив $ files перед json_encode, и он показывает, что мне нужно, просто добавляя ноль в конец массива после кодирования.
Теги:

1 ответ

0
Лучший ответ

(Еще комментарий, что ответ, но мне нужно больше места).

Скобки в выражении, о которых говорит Сверри, ничего не делают и просто сбивают с толку. Просто оставьте их.

Также $files[].= $pathname; выглядит странно. $files[] =... добавляет к массиву и .= добавляет к строке. Выполнение обоих в то же время не имеет смысла. PHP, похоже, игнорирует .=. Возьмите его тоже.

Так

if (!$fileinfo->isFile()) continue;{
$files[] .= $pathname;
}

становится

if (!$fileinfo->isFile()) continue;
$files[] = $pathname;

Скорее всего, это не поможет. Имеет ли массив правильные данные?

  • 0
    Я чувствую себя таким идиотом ... У меня в классе был второй json_encode, который взял результат итератора и снова его закодировал ... Спасибо всем за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню