Foreach в foreach + CodeIgniter

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

$uploads = array($this->uploads->data());
foreach ( $uploads as $key[] => $value )  
{
$imagename = $cleaned . '-s' . $value['file_ext']; //outputs clean-name-s.ext
}

К тому времени, когда все будет сказано и сделано, эта функция потребуется для 4 изображений. Оставив меня с clean-name-sa.ext, clean-name-sb.ext, clean-name-sc.ext и clean-name-sd.ext (числа тоже работают).

Форма требует, чтобы все 4 поля были заполнены перед отправкой, поэтому могу ли я просто создать массив желаемых идентификаторов и создать цикл foreach, который выводит 4 разных имени изображения $? Или есть более простой и логичный подход к этому.


person Sebhael    schedule 03.01.2011    source источник


Ответы (2)


Ваш вопрос немного расплывчатый, поскольку вы не указали, как настроен HTML. Если вам действительно нужен массив, вы можете сделать это:

$uploads = array($this->uploads->data());
foreach ($uploads as $key => $value) {
   foreach (Array('a', 'b', 'c', 'd') as $letter) {
      $imagename = $cleaned . '-s' . $letter . '.' . $value['file_ext']; //outputs clean-name-sX.ext
      // Do something with $imagename here
   }
}

Обратите также внимание, что я изменил $key[] на $key.

person Lightness Races in Orbit    schedule 03.01.2011
comment
Это довольно простой раздел формы <input type="file" name="screen(a-d)"> Используя вашу идею, мне удалось заставить его загружать первый файл с sa, но остальные не двигались. Упростит ли это размещение входных данных в виде массива screen[] вместо индивидуального? Если бы я действительно знал, как использовать форматирование этого сайта, я бы опубликовал свой контроллер и модель... - person Sebhael; 03.01.2011
comment
Публиковать весь контроллер и модель было бы слишком; желателен только полный, минимальный тесткейс. Что значит остальные не двигались? Что на самом деле произошло? - person Lightness Races in Orbit; 03.01.2011
comment
Контроллер Загружает изображения -› foreach ( $_FILES as $key => $value), если загрузка прошла успешно, перейти к модели. Модель Миниатюры, переименование и перемещение файлов. (загрузить image_lib/создать чистое имя) -> foreach ( $uploads as $key => $value ) { $config['new_image'] = './path/to/'.$imagename; $this->image_lib->resize(); rename($value['full_path'], '/path/to/'.$imagename; - person Sebhael; 03.01.2011
comment
Это не тестовый пример и не поможет нам. :) Вместо этого использование массива облегчит вашу жизнь, но на данный момент невозможно сказать, в чем ваша проблема в настоящее время. Поместите выходные данные отладки в свой код, например, print_r присвойте результат $_FILES и напишите echo операторов для отслеживания хода выполнения программы. - person Lightness Races in Orbit; 03.01.2011
comment
По сути, все так и работает, я на самом деле использую codeigniter.com/forums/viewthread/80610 учитывая, что на самом деле нет информации о загрузке нескольких файлов, а сообщения на форумах CI почти не дали мне никакой помощи или руководства. Честно говоря, я даже не знаю, о чем говорю. - person Sebhael; 03.01.2011

Я немного запутался в вашем «очищенном» разделе. Я не знаю, вы не включили весь код или ...?

Что касается перезаписи $imagename - в вашем цикле вы продолжаете изменять значение $imagename... Так что вам нужно, чтобы это был массив..

Что касается добавления букв к именам ... это легко ... просто начните с 97 для «а», а затем добавьте к нему ... везде, где вы хотите использовать букву chr () (также изменено $ imagname на массив)

// 97 is asci for 'a'
$currentChar = 97;  
$imagename = array();

$uploads = array($this->uploads->data()); 
foreach ( $uploads as $key => $value )   { 
    $imagename[] = $cleaned . '-s' . chr($currentChar) . $value['file_ext'];
     //outputs clean-name-s.ext 
     $currentChar++;
} 
person CarpeNoctumDC    schedule 03.01.2011
comment
Я не включил все, но мне действительно удалось заставить все это работать на самом контроллере. Я использовал массив, содержащий имя поля и то, что я хотел добавить к имени файла, а затем зациклил его на этом. Теперь моя проблема заключается в том, чтобы выяснить, как вернуть ошибку во время цикла, не нарушая ничего, а затем вернуть информацию о файле для вставки в базу данных. - person Sebhael; 04.01.2011