Intereting Posts
создание эскизов без их сохранения EC2 – Свежая установка PHP – Почта не работает php завершает загрузку, а затем загружает только javascript. Это правда? Laravel 4 – протоколирование SQL-запросов Найдите подстроку и замените ее на указанный символ Представление формы Ajax в symfony2 с изящной деградацией для пользователей без javascript Многопользовательская одна очередь Как написать PHP-кодирование, чтобы отобразить все файлы и каталоги в качестве ссылок на них? Преимущества MySQLi над MySQL Загрузка AJAX / PHP с индикатором выполнения для больших файлов Соединение отклонено при запуске stream_socket_server & client через apache Какие преимущества имеет PHP для ASP.NET? Как поместить окно предупреждения с помощью PHP? используя php preg_replace для добавления значений src независимо от того, насколько плохо сформирован элемент img Как создавать резервные копии файлов из определенного каталога в Dropbox с помощью PHP?

Извлечение данных в массив из foreach

Пожалуйста, успокойся, это мой первый раз, и, очевидно, я понятия не имею, что я делаю …

Я использую следующий скрипт, который я нашел онлайн для загрузки файлов и записи информации о загрузке в базу данных, я хотел бы получить информацию о $ file_name в другой массив, который будет использоваться вне этого кодового блока в функции implode. Я искал высокий и низкий, но неудачно в поиске. Я выяснил, как печатать $ file_name (ы) изнутри оператора if, но не за пределами как его, так и блока php, но я не могу понять, как это сделать в массив.

Любая помощь будет принята с благодарностью.

<?php if(isset($_FILES['files'])){ $errors= array(); foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){ $file_name = $key.$_FILES['files']['name'][$key]; $file_size =$_FILES['files']['size'][$key]; $file_tmp =$_FILES['files']['tmp_name'][$key]; $file_type=$_FILES['files']['type'][$key]; $timestamp= date('Ymd G:i:s'); if($file_size > 2097152){ $errors[]='File size must be less than 2 MB'; } $query="INSERT into upload_data (FILE_NAME, FILE_SIZE, FILE_TYPE, timestamp) VALUES(:file_name,:file_size,:file_type, :timestamp)"; $desired_dir="files"; if(empty($errors)==true){ if(is_dir($desired_dir)==false){ mkdir("$desired_dir", 0700); // Create directory if it does not exist } if(is_dir("$desired_dir/".$file_name)==false){ move_uploaded_file($file_tmp,"files/".$file_name); }else{ //rename the file if another one exist $new_dir="files/".$file_name.time(); rename($file_tmp,$new_dir) ; } $q = $dbo->prepare($query); $q->execute(array(':file_name'=>$file_name,':file_size'=>$file_size,':file_type'=>$file_type, ':timestamp'=>$timestamp)); }else{ print_r($errors); } } if(empty($error)){ echo "Success"; } } ?> 

Для вашего понимания (как вы сказали, что вы новичок)

В PHP Массив может быть создан с использованием конструкции языка array() . В качестве аргументов требуется любое количество разделенных запятыми key => value .

 Example #1 A simple array <?php $array = array( "foo" => "bar", "bar" => "foo", ); // as of PHP 5.4 $array = [ "foo" => "bar", "bar" => "foo", ]; ?> 

Теперь для вашей озабоченности вам просто нужно положить все измельченные данные из цикла foreach в новый массив следующим образом:

  <?php if(isset($_FILES['files'])){ $errors= array(); $filename_array = array(); foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){ $file_name = $key.$_FILES['files']['name'][$key]; $filename_array[] = $file_name; $file_size =$_FILES['files']['size'][$key]; $file_tmp =$_FILES['files']['tmp_name'][$key]; $file_type=$_FILES['files']['type'][$key]; $timestamp= date('Ymd G:i:s'); if($file_size > 2097152){ $errors[]='File size must be less than 2 MB'; } $query="INSERT into upload_data (FILE_NAME, FILE_SIZE, FILE_TYPE, timestamp) VALUES(:file_name,:file_size,:file_type, :timestamp)"; $desired_dir="files"; if(empty($errors)==true){ if(is_dir($desired_dir)==false){ mkdir("$desired_dir", 0700); // Create directory if it does not exist } if(is_dir("$desired_dir/".$file_name)==false){ move_uploaded_file($file_tmp,"files/".$file_name); }else{ //rename the file if another one exist $new_dir="files/".$file_name.time(); rename($file_tmp,$new_dir) ; } $q = $dbo->prepare($query); $q->execute(array(':file_name'=>$file_name,':file_size'=>$file_size,':file_type'=>$file_type, ':timestamp'=>$timestamp)); }else{ print_r($errors); } } if(empty($error)){ echo "Success"; } } ?> 

Теперь в вашем втором блоке получите имена файлов как

 foreach ($filename_array as $filename) { echo $filename; } 

Обратите внимание на понимание массивов PHP

Установите массив перед циклом:

 $file_name_array = array(); 

Поместите следующий код в строку после $ file_name.

 $file_name_array[] = $file_name; 

Это даст вам массив, содержащий содержимое в $ file_name, и добавит в массив каждый проход с каждым из них.

Затем вы можете делать все, что пожелаете, с помощью массива.

Объявить массив:

 $file_names(); 

Добавьте эту строку внутри цикла после $file_name :

 $file_names[] = $file_name; 

Это $file_names даст вам имя всех файлов.