2014-10-13 3 views
0
function RetrieveAllPages() { 
    $dir = '../pages'; 
    $root = scandir($dir); 
    $result = array(); 
    foreach($root as $value){ 
     if($value === '.' || $value === '..') { 
      continue; 
     } 
     if(is_file("$dir/$value")) { 
      $result[]="$dir/$value"; 
      continue; 
     } 
     foreach(find_all_files("$dir/$value") as $value){ 
      $result[]=array('filename' => $value,); 
     } 

    } 
    print_r ($result); 
    var_dump($result); 
    return $result; 
} 


<?php 
    //echo'<select>'; 
    foreach (RetrieveAllPages() as $value){ 
    //echo "<option value='".$value['rolename']."'>".$value['rolename']."</option>"; 
    echo'<input type="checkbox" value='.$value['result'].' name='.$value['result'].'/>'; 
    } 
    //echo'</select>'; 
?> 

получение такого рода ошибки в PHP код выше я есть исследования и не могу найти какой-либо источник, который соответствует solution..any предложение или идея является appreaciatedНелегальная строка смещения «результат» в PHP эхо

UPDATE

function RetrieveAllPages() { 
    $result = array(); 
    $dir = "../pages"; 
    $dh = opendir($dir); 
    while (false !== ($filename = readdir($dh))) { 
     $files[] = $filename; 
    } 
    print_r ($result); 
    var_dump($result); 
    return $result; 
} 

результат Array () array(0) { }

+0

Вы имеете в виду '$ value ['filename']'? нет никакого индекса 'result', определенного в любом месте вашего массива. '$ value ['filename']' также генерирует предупреждения, так как у вас есть некоторые индексы, определенные как строка '$ result [] =" $ dir/$ value ";' – bansi

+1

что делает этот 'find_all_files'? искать файлы внутри каталога? – Ghost

+0

@bansi Я хочу, чтобы файл был именем в поле, когда я делаю print_r, он печатает все файлы в результате, но в папке «Входящие» нет текста, но ошибка, пожалуйста, объясните свой комментарий немного больше, я не могу понимаю, что я в настоящее время занимаюсь учебниками в этом, поэтому у меня возникают проблемы – Giant

ответ

1

, если вы не хотите, чтобы список файлов рекурсивно вы можете использовать это.

function RetrieveAllPages() { 
    $dir = '../pages'; 
    $root = scandir($dir); 
    $result = array(); 
    foreach($root as $value){ 
     if($value === '.' || $value === '..') { 
      continue; 
     } 
     if(is_file("$dir/$value")) { 
      $result[]="$dir/$value"; 
     } 
     //Note: removed the recursive call 
    } 
    print_r ($result); 
    var_dump($result); 
    return $result; 
} 

//echo'<select>'; 
foreach (RetrieveAllPages() as $value){ 
//echo "<option value='".$value['rolename']."'>".$value['rolename']."</option>"; 
// Note $value contains the filename!!! 
echo'<input type="checkbox" value='.$value.' name='.$value.'/>' ; 
} 
//echo'</select>'; 

Вот еще один способ, который намного короче! использует array_filter и anonymous function.

$all_files = array_filter(scandir('../pages'),function($v){return(!($v === '.' || $v === '..'));}); 
foreach ($all_files as $value){ 
    echo'<input type="checkbox" value='.$value.' name='.$value.'/>' . $value .'<br/>'; 
} 
+0

второе решение, о котором я хочу спросить ... он все еще работает, чтобы принять принятый ответ, но когда я попробовал это, он работает, но Я получаю ошибку в 'foreach (RetrieveAllPages() как $ value) {' 'Недопустимый аргумент для foreach()', когда я использую это решение, это только чистая строка? Пожалуйста, объясните бит – Giant

+1

Второй метод не нужен 'RetrieveAllPages 'функция. То, что он делает, это получить каталог 'scandir ('../ pages')' и удалить функцию '.' и' ..' с помощью функции array_filter и вернуть список файлов. Обратите внимание, что это не позаботится о том, является ли элемент каталогом. вам остается проверить. – bansi

+0

спасибо за объяснение, я буду использовать это очень легко понять – Giant

1

вы получаете Illegal offset ошибку из-за того, как вы определили функцию RetrieveAllPages(). Из кода он в основном сканирует корневую папку для файлов и каталогов. Если он сталкивается с каталогом, он пытается найти все файлы в этом каталоге и толкает их в массив result, который вы возвращаете.

Если вы заметили выход при печати result массив это будет выглядеть примерно так (просто пример):

Array ([0] => foo.jpg [1] => bar.txt [2] => Array ([filename] => Testfile.pdf)) 

Теперь, когда у вас есть представление о том, что ваша функция возвращает, давайте вернемся к echo заявление:

foreach (RetrieveAllPages() as $value){ 
    //Here the $value could be either string of the form root/foo etc or 
    echo $value; //String of file directly found in root directory 

    //It would be of the form of an array where you would get file names by doing something like: 
    echo $value[0]['filename']; //from the nested array 

} 

в любом случае, вы не используете строку смещения result в любом месте в массиве, который вы создаете в RetrieveAllPages(). Единственное смещение строки, которое вы используете, - filename. Вероятно, именно поэтому вы получаете эту ошибку, когда пытаетесь создать флажки из этих значений. То, как вы обрабатываете эти два вида значений в возвращаемом массиве, полностью зависит от вас.

Sidenote - Как вы сохраняете свои значения, довольно вероятно, что ваша функция вернет вложенный массив. Один из способов может быть, если вы попадаете в каталог вместо файла, просто префикс строки к именам файлов, найденным в этом каталоге, вместо создания вложенных массивов с префиксом filename. Это значительно упростит ваши операторы echo, где вы создадите флажки HTML.

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

Смежные вопросы