Работа с массивом

ArkDoom

Новичок
Работа с массивом

Доброе время суток.

Из-за не знания и не понимания возник вопрос!
Есть форма добавления фота:
PHP:
echo '<b>Загрузка фотографий: </b><br>';

  $fieldCnt = 20-$filesCnt;
  for ($i = 1; $i <= $fieldCnt; $i++) {
    echo '
    <div style="padding: 2px 0px 1px 15px;"><input name="myfile', $i, '" id="myfile', $i, '" type="file"></div>';
  }
}
Есть скрипт который фото размещает на сервер:
PHP:
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/objfoto/'.$id;
if (!is_dir($uploaddir)){ mkdir($uploaddir); }

foreach ($_FILES as $myfile) { 
  $tmp_name = $myfile["tmp_name"];
  $error_flag = $myfile["error"]; 
  $myfile_size = $myfiles["size"];
  $uploadfile = basename($myfile['name']);
  if($error_flag == 0) { 
  } 

  if (is_uploaded_file($tmp_name)) {
    //move_uploaded_file($tmp_name, $uploadfile);
    makeBig($tmp_name, $uploaddir, $uploadfile);
    makeT($tmp_name, $uploaddir.'/thumb', 'thumb_'.$uploadfile);
    makeT1($tmp_name, $uploaddir.'/thumb', 'thumb1_'.$uploadfile);
    unlink($tmp_name);
  }
}
Так вот, не могу взять ИМЯ 1ой фотаграфии в переменную. Подскажите что нужно для этого сделать. Спасибо!
 

ArkDoom

Новичок
Не вкурил +_+

фотографии загружаться из массива нормально.
 

zerkms

TDD infected
Команда форума
в приведённом коде ты уже получаешь имя не только первого, но и вообще каждого файла.
осталось распорядиться только этим с умом.

 

ArkDoom

Новичок
zerkms
Ну да, там есть имена файлов. Но как правильно взять только 1ое имя?

Я просто что уже не писал, выводит все через..... =)
 

zerkms

TDD infected
Команда форума
взять первый элемент массива $_FILES - в нём ещё массив, в котором имя.
 

ArkDoom

Новичок
Что-то я совсем запутался.....

PHP:
foreach ($_FILES as $myfile) { 
  $tmp_name = $myfile["tmp_name"];
  $error_flag = $myfile["error"]; 
  $myfile_size = $myfiles["size"];
  $uploadfile = basename($myfile['name']);
  $test1 = array($myfile['name']);
  foreach ($test1 as $test2) {
  echo $test2[0];
echo $test2[1];
echo $test2[2];
echo $test2[3];
  }
  if($error_flag == 0) { 
  }
Тест[0] = первая буква файоа
Тест[1] = вторая
Тест[2] = и т/п/
 

zerkms

TDD infected
Команда форума
а если просто echo $test1 для начала, перед циклом? и без array()

$test1 = $myfile['name'];
echo $test1;
 

ArkDoom

Новичок
Array5cfe020f7be8.jpg

-~{}~ 11.05.10 13:35:

5cfe020f7be8.jpg - и есть имя фотки

-~{}~ 11.05.10 14:16:

Как не ковырял......при он пишет только 1ые буквы +_+
 

ArkDoom

Новичок
Если просто сделать

$arrtest = array($uploadfile);
echo $arrtest;
то он показывает ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray

Если
$arrtest = array($uploadfile);
echo $arrtest[0];

то 5cfe020f7be8.jpg3317cac6533c.jpg
 

dimagolov

Новичок
А что по-твоему должен делать этот кусок кода и для чего?

PHP:
  $test1 = array($myfile['name']);
  foreach ($test1 as $test2) {
  echo $test2[0];
echo $test2[1];
echo $test2[2];
echo $test2[3];
  }
 

ArkDoom

Новичок
array(20) { ["myfile1"]=> array(5) { ["name"]=> string(16) "5cfe020f7be8.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(18) "W:\tmp\php1CFF.tmp" ["error"]=> int(0) ["size"]=> int(28856) } ["myfile2"]=> array(5) { ["name"]=> string(16) "3317cac6533c.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(18) "W:\tmp\php1D00.tmp" ["error"]=> int(0) ["size"]=> int(37472) } ["myfile3"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile4"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile5"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile6"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile7"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile8"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile9"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile10"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile11"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile12"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile13"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile14"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile15"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile16"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile17"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile18"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile19"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["myfile20"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } }
 

dimagolov

Новичок
ArkDoom, ну теперь ответь на второй вопрос. или можешь сразу сказать как правильно "взять ИМЯ 1ой фотаграфии в переменную"
 

ArkDoom

Новичок
dimagolov

Я често уже несколько часов сижу, и у меня едет крыша..... что дает тот кусок кода реально не знаю (сейчас =) )

И как взять имя не знаю. Ибо с таким не сталкивался и не могу найти примеров в инете.

Из массива array(4) { [10]=> string(13) "passenger car" [20]=> string(10) "land-rover" [30]=> string(13) "station-wagon" [31]=> string(8) "victoria" }

echo($ololo[10]); то напишет passenger car

Это я знаю, но в моем случае к меня тупик

-~{}~ 11.05.10 15:14:

Я понимаю что нужно взять идекс ["myfile1"] и взять из него ["name"] .....
 

dimagolov

Новичок
искать нужно не примеры в инете, а банальное описание что такое массив (в любом ЯП) и что конкретно делает конструкция foreach в ПХП. как с этим будет понимание, то и станет понятно что делает тот код и как "взять ИМЯ 1ой фотаграфии в переменную". пока понимания этого вопроса не будет, то помочь тебе нельзя.

коротко: массив - это набор пар ключ-значение. то есть можно извлечь любое значение из массива зная его ключ, или перебрав все значения с помощью foreach:
PHP:
$arr= array ('key' => 3, 1 => 5);
echo $arr['key'].'</br>'; // 3
echo arr[1].'</br>'; //5
foreach ($arr as $k => $v) {
   echo $k.'-'.$v'</br>'; // key-3, 1-5
}
-~{}~ 11.05.10 08:18:

Я понимаю что нужно взять идекс ["myfile1"] и взять из него ["name"]
молодец. так в чем же проблема?

-~{}~ 11.05.10 08:20:

что дает тот кусок кода реально не знаю (сейчас =)
бред он дает, никому не нужный. по крайней мере в рамках данной задачи. но сам по себе синтаксически корректный код вывода первых 4-х символов имени файла, пока это имя длиннее четырех символов.
 

ArkDoom

Новичок
Спасибо огромно.....разобрался =)
Перед foreach взял все что нужно =)

PHP:
$mainphoto = $_FILES["myfile1"]["name"];
foreach ($_FILES as $myfile) { 
  $tmp_name = $myfile["tmp_name"];
  $error_flag = $myfile["error"]; 
  $myfile_size = $myfiles["size"];
  $uploadfile = basename($myfile['name']);
  if($error_flag == 0) { 
  } 

  if (is_uploaded_file($tmp_name)) {
    //move_uploaded_file($tmp_name, $uploadfile);
    makeBig($tmp_name, $uploaddir, $uploadfile);
    makeT($tmp_name, $uploaddir.'/thumb', 'thumb_'.$uploadfile);
    makeT1($tmp_name, $uploaddir.'/thumb', 'thumb1_'.$uploadfile);
    unlink($tmp_name);
  }
  }
  echo $mainphoto;
 

dimagolov

Новичок
ArkDoom, содержимое $myfile['name'] нужно дополнительно фильтровать, потому что там может быть всякая фигня, начиная с не-ASCII символов в самых разных кодировках, а ты их себе в имя файла пихаешь. не говоря уж о том, что оно банально может совпасть с уже существующим.
вообще имя файла у клиента никого особо не интересует, его разве что в базу можно писать, а вот файл на диске именовать по id из базы.
 

ArkDoom

Новичок
Это название для превьюшки, она храниться в БД. Название нужно хранить ибо человек может потом изменить превьюшку.

У меня все в папке по ID из базы и храниться (это просто вырезанный кусок кода)

Фильтацию щас буду делать, главное я понял основное =)

dimagolov и спасибо за помощь!
 
Сверху