Забыл основы(= есть массив $masiv_ = array(....) и есть переменная $num = 1; Вопрос: как соединить $massiv и $num, чтобы получилось $massiv_$num = array(....) ? Иными словами, чтобы получилось так: $массив_ = array(....); $номер массива = 1; Как сделать, чтобы получилось $массив_1 = array(....)?
AlexZ А зачем? Я могу дать решение, но сдаётся мне, что оно совершенно не нужно из-за ошибок в проектировании. Или всё-таки имеется в виду не изменение имени, а добавление ключей?
нет не ключей-именно имя нужно поменять. прикол в том, что мне придется использовать 3 одинаковых функции. разниуа только в 1 цифре( разными будут только имена массива), - конечно можно написать и три функции, но зачем, если можно обойтись одной?
приведу пример - $num = 1; upload_picture($name1, $num) $num = 2; upload_picture($name2, $num) $num = 3; upload_picture($name3, $num) $num = 4; upload_picture($name4, $num) и собственно пример из кода $report_upload_$num = array("Текст");
Короче всё понятно: попытка решить задачу таким способом, которым её решать ни в коем случае не нужно. A вот саму задачу я так и не понял, но то, что решение абсолютно неприемлимое, — видно с первого взгляда.
А ВООБЩЕ РЕАЛЬНО ЭТО ИЛИ НЕТ - ВСЕ ТАКИ ВЛОМ ПИСАТЬ НЕСКОЛЬКО ОДИНАКОВЫХ ФУНКЦИЙ... А ЗАДАЧА ... ПРИМЕР : $num = 1; upload_picture($name1, $num); FUNCTION upload_picture($name1, $num) { ...... $report_upload_$num = array("БЛАБЛАБЛА"); //Т.Е. ЧТОБЫ ПОЛУЧИЛОСЬ $report_upload_1 = array("БЛАБЛАБЛА"); } ЭТО РЕАЛЬНО СДЕЛАТЬ ИЛИ НЕТ ? И ПОЧЕМУ "попытка решить задачу таким способом, которым её решать ни в коем случае не нужно" - ПОЯСНИТЕ.
Да потому что возможность что-то сделать каким-либо способом никак не означает, что нужно таким способом это делать. Когда вы идёте в магазин, то не едете же сначала в Африку, минуете амазонки и на вертолёте через несколько городов Европы попадаете в магазин, если для этого достаточно перейти дорогу? Нет, вы выходите из подъезда, переходите через дорогу и попадаете в магазин. Мы поступим именно так, потому что это разумней. Из этого я делаю вывод, что вы абсолютно не знаете, что представляет из себя функция. Смотрим: PHP: <?php function Multiply($x, $y) { return $x * $y; } echo Multiply(2, 2); echo Multiply(3, 6); $first = 4; $second = 6; echo Multiply($first, $second); ?> Я же не создаю чёрт знает сколько функций, я использую одну единственную.
совсем не понял... как подставлять переменные в функцию я и так знал... в приведенном коде вы указали как можно подставить переменные, но мне надо, чтобы менялось имя создаваемого массива ( потому как в конце все должны получиться 3 массива данных, как то $report_upload_1; $report_upload_2; $report_upload_3; Конечно же если бы задача ставилась тупо забить данные в один массив, или просто выводить его в конце функции на экран, было бы просто и "в африку не зачем было бы ехать", но тут немного по-другому... и если я не прав, как тогда сделать, то что требуется, т.е.: $num = 1; upload_picture($name1, $num); $num = 2; upload_picture($name2, $num); FUNCTION upload_picture1($name1, $num) { ...... $report_upload_1 = array("БЛАБЛАБЛА1"); } FUNCTION upload_picture2($name2, $num) { ...... $report_upload_2 = array("БЛАБЛАБЛА2"); } и в конце нужно получить массивы с заданными именами $report_upload_1;$report_upload_2;$report_upload_3 ?
PHP: <?php $report_upload = array(); /** * Создадим функцию с возможностью передачи * по ссылке */ function upload_picture(&$report, $num) { $report[] = array("Бла-бла-бла"); } /** * Какая-нибудь хрень */ upload_picture($report_upload, 1); upload_picture($report_upload, 2); upload_picture($report_upload, 3); upload_picture($report_upload, 4); /** * Результатом будет внесение изменений в исходный * массив */ echo "<pre>" . print_r($report_upload, true) . "</pre>"; ?>
Переделал под свой код. Спасибо за помощь. Получилось лучше, чем хотел. как всегда не хватало знаний ( к примеру впервые увидел upload_picture(&$report, $num и вообще). Вывод Учиться и еще раз учиться, как говорил товарищ Ленин ) ... И все таки последний вопрос (так сказать для общего развития - когда -нибудь все равно пригодится) как соединить $massiv и $num, чтобы получилось $massiv_$num?
AlexZ а чем не угодили массивы массивов? =) и тем более, если ты знашеь, что их будет три, ну и назови их заранее... Расскажи подробнее и конкретнее. Тут никто не похитит твои важные мегаидеи =) не боись.
да я и не боюсь( я вообще считаю, что если код интересный его нужно показывать общественности). к примеру общий мой код таков PHP: <?php function upload_picture(&$report_upload2, $num, $folder, $info, $name, $tmpname, $typename, $ip, $pc) { other_connect(); $sql = "SELECT * FROM `gallery` WHERE `folder` = '$folder'"; $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql); if (mysql_num_rows($result) > 0) {$i=mysql_num_rows($result) + 1;} else {$i=1;} if ($typename == 'image/jpg'){$typename = 'jpg';} if ($typename == 'image/jpeg'){$typename = 'jpeg';} if ($typename == 'image/png'){$typename = 'png';} if ($typename == 'image/gif'){$typename = 'gif';} $name = $i.'.'.$typename; $original = $i.'original_.'.$typename; $small = $i.'small_.'.$typename; $nobig = $i.'nobig_.'.$typename; $big = $i.'big_.'.$typename; $see_name = "./gallery/$folder"; $see_pic = "./gallery/$folder/$name"; $see_pic_small = "./gallery/$folder/$small"; $see_pic_nobig = "./gallery/$folder/$nobig"; $see_pic_big = "./gallery/$folder/$big"; echo "<br>".$name."<br>", $original."<br>", $small."<br>", $nobig."<br>", $see_pic."<br>", $see_name; $report_upload = array("Отчет о загрузки изображений"); if (!is_dir("$see_name")){if (mkdir("$see_name")){array_push($report_upload, "Создан каталог ".$folder);} else {array_push($report_upload, "Невозможно создание каталога ".$folder);}} if (copy($tmpname, $see_pic)) {array_push($report_upload, "Загружено изображение ".$name0);} else {array_push($report_upload, "Ошибка загрузки изображения ".$name);} if (img_resize($see_pic, $see_pic_small, 90, 90)) {array_push($report_upload, "Завершено создание 90*90 изображения ".$name);} else {array_push($report_upload, "Ошибка создания 90*90 изображения ".$name0);} if (img_resize($see_pic, $see_pic_nobig, 750, 700)) {array_push($report_upload, "Завершено создание 350*300 изображения ".$name);} else {array_push($report_upload, "Ошибка создания 750*700 изображения ".$name);} if (img_resize($see_pic, $see_pic_big, 1024, 1000)) {array_push($report_upload, "Завершено создание 1024*1000 изображения ".$name);} else {array_push($report_upload, "Ошибка создания 1024*1000 изображения ".$name);} $sql1 = "INSERT INTO `gallery` (`id`, `folder`, `original`, `big`, `nobig`, `small`, `info`, `ip`, `pc`) VALUES ('', '$folder', '$original', '$big', '$nobig', '$small', '$info', '$ip', '$pc')"; $result1 = mysql_query($sql1) or die(mysql_error() ."<br/>". $sql1); if ($result1){array_push($report_upload, "Изображение ".$name."сохранено в базе данных");} else {array_push($report_upload, "Изображение ".$name." сохранено в базе данных");} //$report_upload; $report_upload2[] = $report_upload; } ?> PHP: <?php if ($info0 != '') {upload_picture($show_report_upload, $num, $folder, $info0, $name0, $tmpname0, $typename0, $ip, $pc);} if ($info1 != '') {upload_picture($show_report_upload, $num, $folder, $info1, $name1, $tmpname1, $typename1, $ip, $pc);} ?> У народа конечно же есть и лучше скрипты, но я только учусь, а вся наша жизнь есть сплошное учение и нравоучение)) .. Часть конечно же вырезал (ни к чему она здесь). P/s/ коментарии по коду конечно же приветствуются...
в каждую строку не вчитывался. но не вижу тут ситуации, когда надо то, что вы описали в первом посте. Многомерные массивы знаете что такое? Например: $pic[1]['file']='mypornphoto.jpg'; $pic[1]['img_id']='1682'; $pic[1]['author_id']='27'; $pic[1]['comment']='мокрые киски только на ввв.мокракиска.ру'; $pic[2]['file']='CAT.jpg'; $pic[2]['img_id']='1683'; $pic[2]['author_id']='14'; $pic[2]['comment']='мокрые киски после душа'; И никакой нужды в склейке массвов из переменных. Вместо 1 или 2 можете саму эту переменную и подставлять и жить счастливо. =) Круто, да?!
PHP: <?php if ($info0 != '') {upload_picture($show_report_upload, $num, $folder, $info0, $name0, $tmpname0, $typename0, $ip, $pc);} if ($info1 != '') {upload_picture($show_report_upload, $num, $folder, $info0, $name0, $tmpname0, $typename0, $ip, $pc);} ?> Легким движением руки элегантные брюки превращаются, превращаются... В удобные шорты. PHP: <?php if ($info0 != '' OR $info1 != '') {upload_picture($show_report_upload, $num, $folder, $info0, $name0, $tmpname0, $typename0, $ip, $pc);} ?>
лучше бы не пригождалось. потом будете искать, где заполняется массив report_1, а найти не просто. поиск по тексту скрипта не даст результатов и надо будет вспоминать, как всё делалось вначале.
я же не весь код привел- не 2 условия, больше, и переменные входят разные в функцию (сейчас заметил, что вначале немного неправильно написал- исправил код таков PHP: <?php if ($info0 != '') {upload_picture($show_report_upload, $num, $folder, $info0, $name0, $tmpname0, $typename0, $ip, $pc);} if ($info1 != '') {upload_picture($show_report_upload, $num1, $folder, $info1, $name1, $tmpname1, $typename1, $ip, $pc);} ?> а про многомерные массивы да - оптимальное решение, лучше чем я хотел (только раньше ими не приходилось пользоваться)... Отсюда все начинается: PHP: $report_upload = array("Отчет о загрузки изображений"); только было бы: PHP: $report_upload_1 = array("Отчет о загрузки изображений"); ну и дальше заполнение уже массива $report_upload_1
PHP: <?php function upload_picture($num, $folder, $info, $name, $tmpname, $typename, $ip, $pc) { other_connect(); $sql = "SELECT * FROM `gallery` WHERE `folder` = '$folder'"; $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql); if (mysql_num_rows($result) > 0) {$i=mysql_num_rows($result) + 1;} else {$i=1;} if ($typename == 'image/jpg'){$typename = 'jpg';} if ($typename == 'image/jpeg'){$typename = 'jpeg';} if ($typename == 'image/png'){$typename = 'png';} if ($typename == 'image/gif'){$typename = 'gif';} $name = $i.'.'.$typename; $original = $i.'original_.'.$typename; $small = $i.'small_.'.$typename; $nobig = $i.'nobig_.'.$typename; $big = $i.'big_.'.$typename; $see_name = "./gallery/$folder"; $see_pic = "./gallery/$folder/$name"; $see_pic_small = "./gallery/$folder/$small"; $see_pic_nobig = "./gallery/$folder/$nobig"; $see_pic_big = "./gallery/$folder/$big"; echo "<br>".$name."<br>", $original."<br>", $small."<br>", $nobig."<br>", $see_pic."<br>", $see_name; $report_upload["$num"]['1'] = "Отчет о загрузки изображений"; echo "<pre>" . print_r($report_upload["$num"]['2'], true) . "</pre>"; if (!is_dir("$see_name")){if (mkdir("$see_name")){$report_upload["$num"]['3'] = "Создан каталог ".$folder;} else {$report_upload["$num"]['3'] = "Невозможно создание каталога ".$folder;}} if (copy($tmpname, $see_pic)) {$report_upload["$num"]['4'] = "Загружено изображение ".$name0;} else {$report_upload[$num]['4'] = "Ошибка загрузки изображения ".$name;} if (img_resize($see_pic, $see_pic_small, 90, 90)) {$report_upload["$num"]['5'] = "Завершено создание 90*90 изображения ".$name;} else {$report_upload["$num"]['5'] = "Ошибка создания 90*90 изображения ".$name0;} if (img_resize($see_pic, $see_pic_nobig, 750, 700)) {$report_upload["$num"]['6'] = "Завершено создание 350*300 изображения ".$name;} else {$report_upload["$num"]['6'] = "Ошибка создания 750*700 изображения ".$name;} if (img_resize($see_pic, $see_pic_big, 1024, 1000)) {$report_upload["$num"]['7'] = "Завершено создание 1024*1000 изображения ".$name;} else {$report_upload["$num"]['7'] = "Ошибка создания 1024*1000 изображения ".$name;} $sql1 = "INSERT INTO `gallery` (`id`, `folder`, `original`, `big`, `nobig`, `small`, `info`, `ip`, `pc`, `status`) VALUES ('', '$folder', '$original', '$big', '$nobig', '$small', '$info', '$ip', '$pc', 'hide')"; $result1 = mysql_query($sql1) or die(mysql_error() ."<br/>". $sql1); if ($result1){$report_upload["$num"]['8'] = "Изображение ".$name."сохранено в базе данных";} else {$report_upload["$num"]['8'] = "Изображение ".$name." сохранено в базе данных";} //$report_upload; }?> PHP: <?php if ($info0 != '') {upload_picture(1, $folder, $info0, $name0, $tmpname0, $typename0, $ip, $pc);} if ($info1 != '') {upload_picture(2, $folder, $info1, $name1, $tmpname1, $typename1, $ip, $pc);} ?> все исправил, но теперь появился вопрос - а как вывести массив $report_upload? т.е. нужно вывести во втором скрипте после PHP: <?php if ($info1 != '') {upload_picture(2, $folder, $info1, $name1, $tmpname1, $typename1, $ip, $pc);}?> теперь если прописываю echo "<pre>" . print_r($report_upload, true) . "</pre>"; как это делал раньше (в конце второго скрипта, общий массив не выводится, а если прописать на вывод в конце функции upload_picture (1 скрипт), то это не подойдет, т.к. выводится данные в несколько массивов. Т.е. в итоге я имею Код (Text): Array ( [1] => Array ( [1] => Отчет о загрузки изображений [4] => Загружено изображение [5] => Завершено создание 90*90 изображения 25.jpeg [6] => Завершено создание 350*300 изображения 25.jpeg [7] => Завершено создание 1024*1000 изображения 25.jpeg [8] => Изображение 25.jpegсохранено в базе данных ) ) Array ( [2] => Array ( [1] => Отчет о загрузки изображений [4] => Загружено изображение [5] => Завершено создание 90*90 изображения 26.jpeg [6] => Завершено создание 350*300 изображения 26.jpeg [7] => Завершено создание 1024*1000 изображения 26.jpeg [8] => Изображение 26.jpegсохранено в базе данных ) ) а хотелось бы Код (Text): Array ( [1] => Array ( [1] => Отчет о загрузки изображений [4] => Загружено изображение [5] => Завершено создание 90*90 изображения 25.jpeg [6] => Завершено создание 350*300 изображения 25.jpeg [7] => Завершено создание 1024*1000 изображения 25.jpeg [8] => Изображение 25.jpegсохранено в базе данных ) [2] => Array ( [1] => Отчет о загрузки изображений [4] => Загружено изображение [5] => Завершено создание 90*90 изображения 26.jpeg [6] => Завершено создание 350*300 изображения 26.jpeg [7] => Завершено создание 1024*1000 изображения 26.jpeg [8] => Изображение 26.jpegсохранено в базе данных ) ) Как это можно сделать?
foraech вложенный в foreach (и так далее) может пройти по массиву глубоко и хорошо. выглядит примерно так (если это уже знаете - прошу не обижаться, слишком много буков чтобы читать в четыре утра): foreach (array_expression as $key => $value) { значит $key это будет [1], а $value будет весь массив [1] => Array ( [1] => Отчет о загрузки изображений [4] => Загружено изображение [5] => Завершено создание 90*90 изображения 25.jpeg [6] => Завершено создание 350*300 изображения 25.jpeg [7] => Завершено создание 1024*1000 изображения 25.jpeg [8] => Изображение 25.jpegсохранено в базе данных ) соответственно, на втором заходе будет весь массив [2] И тут же на этот массив снова натравить foreach (array_expression as $key => $value) { и получите key = 1, value = Отчет о загрузки изображений Это целиком и полностью на форич. Но в вашем случае не обязательно, ибо известно заранее все про эти массивы, и если вы точно знаете что будет с 1 по 8 там членов, но можно обойтись одним форич. foreach (array_expression as $key => $value) { значит $key это будет [1], а обращаться сразу к $value[1], $value[2] и т.п. PS: дайте им имена, а то цифр столько, что голова кругом пойдет, когда будете отлаживать. [1] => Array ( ['report'] => Отчет о загрузки изображений ['action'] => Загружено изображение ['90x90'] => true (false или имя превьюшки, id - уж как вам больше нраааца) ... ['done'] => true\false\или ID из бд ) и отчет полный о процессах проведенных сможете построить легко и строку для БД. но вобще я бы советовал делать ВСЁ несколько иначе. Опыта у меня не много, но свой взгляд на эти вещи имею. Если подробно изложите изначальную задачу, не упоминая кода и т.п. - тоесть ТЕХЗАДАНИЕ - поделюсь мыслями.
Здравствуйте. Извиняюсь, что долго молчал, - ездил к друзьям в другой город, а там некогда было. По поводу тех. задания : Необходим загрузчик изображений, с описанием к ним и отчетом загрузки. А также с автоматическим масштабированием изображений при загрузки на 3 формата 90*90, 350*300, 1024*1000. Пошагово это выглядит так: 1) Пользователь заходит на страницу с формой - форма содержит поля каталог, изображение (тип файл) и поле описание. Ну и субмит разумеется. Под формой находится спец. поле для вывода отчета. 2) поля могут динамически добавляться и удаляться по желанию пользователя.(кроме поля каталог) 3) данные из формы передаются на страницу обработки. 5)проверка существования каталога в папке image - если существует, то пропускаем, если нет - добавляем(согласно имени которое юзер ввел в поле каталог). 6) остальные данные прогоняются через несколько функций, в частности, - проверка на соответствие расширение картинок, размер файла не больше 4 мб, далее создаем 4 изображения в папке с картинками (в каталоге),- 1 изображение - первоначально загруженное пользователем изображение, остальные 3 - создаются по заданным параметрам. 7) каждое действие (положительное или отрицательное) записывается в массив. 8) массив передается по ссылке обратно на страницу с формой и выводится в спец. поле. И напоследок, то чего я пока еще не сделал(ну помимо отчета)) ) - необходимо сделать так, чтобы картинки масштабировались по ширине, но не были больше определенных размеров по длине или наоборот P/s/ forаech сейчас посмотрю, позже отвечу.
не могу разобраться как PHP: foreach (array_expression as $key => $value) { значит $key это будет [1], а обращаться сразу к $value[1], $value[2] и т.п. PS: дайте им имена, а то цифр столько, что голова кругом пойдет, когда будете отлаживать. [1] => Array ( ['report'] => Отчет о загрузки изображений ['action'] => Загружено изображение ['90x90'] => true (false или имя превьюшки, id - уж как вам больше нраааца) ... ['done'] => true\false\или ID из бд ) приспособить к этому: PHP: 1. <?php 2. if ($info0 != '') 3. {upload_picture(1, $folder, $info0, $name0, $tmpname0, $typename0, $ip, $pc);} 4. if ($info1 != '') 5. {upload_picture(2, $folder, $info1, $name1, $tmpname1, $typename1, $ip, $pc);} 6. ?> И вопрос еще возник, а данный пример будет рабоать быстрее, чем PHP: function upload_picture(&$report_upload2, $num, $folder, $info, $name, $tmpname, $typename, $ip, $pc) или нет? Если нет, то смысл использовать?