Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Созд. нов. массив, используя один массив в качеств, ключей,а др. в кач. соотв-их значений 
:(
    Опции темы
Acraft
Дата 10.11.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 19.4.2005

Репутация: 1
Всего: 2



  Я хотел написать скрипт который позволял бы выбирать элементы массива $list_tmp и задавать порядок следования выбранных элементов. 
  Т.е. выводится массив а напротив каждого элемента находится элемент формы "text", где я проставляю порядковый номер элемента. 
После обработки выбранные элементы массива образуют массив $list и следуют именно в том порядке который я им задал. Использовать array_combine() не могу, т.к. работаю с PHP4
  Идея алгоритма проста - из формы получаем 2 массива: $list_tmp - массив слов, $consecution - массив с цифрами, который отображают порядок в котором должены быть отсортированы выбранные элементы $list_tmp
В цикле от $i=0 до размера любого из 2-х массивов заполняем третий массив $list(mas[$i]))=$list_tmp[mas[$i]]
По моему, алгоритм должен работать, но тем не менее $list заполняется не в нужном порядке (почему отловить не могу).

Такой вот код, чтобы в примере избавиться от работы с базой, здесь используется заранее объявленный массив list_tmp.
Код

<?
if (isset($_POST['subm']))
  {
   $list=Array(); 
   $consecution=Array();

   $keys_array=array_keys($_POST);
   for ($i=0; $i<sizeof($keys_array); $i++)
      {
       if (substr($keys_array[$i],0,strpos($keys_array[$i],'_'))=='consec')
         {
          if (trim($_POST[$keys_array[$i]])!='')
            {
             $consecution[sizeof($consecution)]=trim($_POST[$keys_array[$i]])-1;
            }
         }
      }
   ?><hr><table width=100% border=1><?
   for ($i=0; $i<sizeof($_POST['list_tmp']); $i++)
      {
       ?>
         <tr>
          <td><?echo $_POST['list_tmp'][$i];?></td>
          <td><?echo $consecution[$i];?></td>
          <td><?echo 'list['.$consecution[$i].']=list_tmp['.$consecution[$i].']  --  '.$_POST['list_tmp'][$consecution[$i]].'<br>';?></td>
         </tr>
       <?
       $list[$consecution[$i]]=$_POST['list_tmp'][$consecution[$i]];
      }
   ?></table><hr><?

//   ksort($list);
//   echo sizeof($_POST['list_tmp']).'<br>';
//   echo sizeof($list).'<br>';
   for ($i=0; $i<sizeof($list); $i++)
      {
       echo $list[$i].'<br>';
      }
   exit();
  }
$list_tmp=Array('list_1','list_2','list_3','list_4','list_5','list_6','list_7','list_8','list_9','list_10',);
?>
<center>
<form name="form_1" action="002.php" method="POST">
<table border="0">
<?
$q=0;
$k=0;
for ($i=0; $i<sizeof($list_tmp); $i++)
   {
    ?>
     <tr>
        <td><input type="checkbox" name="list_tmp[]" value="<?echo $list_tmp[$i]?>"></td>
        <td><?echo $list_tmp[$i];?></td>
        <td><input type="text" name="consec_<?echo $k;?>" value="" size="2"></td>
     </tr>
    <?
    $k++;
   }
?>
</table>
<input type="submit" name="subm" value="Submit">
</form>


Возможно будут комментарии не только по коду, но и по алгоритму. С удовольствием выслушаю.
PM MAIL   Вверх
ZlojEzh
Дата 10.11.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: 10
Всего: 15



не уверен, что правильно врубился в проблему, но, кажется, после всех этих операций надо выполнить ksort($list)
PM MAIL ICQ   Вверх
Acraft
Дата 11.11.2006, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 19.4.2005

Репутация: 1
Всего: 2



Пробовал. И с ksort() и без него результат одинаковый.  т.е.  ksort() здесь ни при чем  smile .

p.s.: например, есть картинки. Их имена находятся в базе. Мне нужно чтобы можно было менять порядок их следования. Я загоняю их имена в массив $list_tmp, там они идут по алфавиту. Есть 2-й массив $consecution в котором записан порядок в котором они должны следовать относительно первого массива. Т.е. получается что нужно создать 3-й массив $list который будет иметь содержимое из первого массива, а ключи из второго.

for ($i=0; $i<sizeof($_POST['list_tmp']); $i++)  
    {  
      $list[$consecution[$i]]=$_POST['list_tmp'][$consecution[$i]];  
    }  
ksort($list);


Это сообщение отредактировал(а) Acraft - 11.11.2006, 12:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.