[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Взаимодействие двух разных массивов
gen552
Всем привет.

Ситуация.
За основу взята много уровневая галерея.

Есть папка "images". В ней содержится ещё, к примеру, три папки "Cars" , "Ships", "Trains".

В этой же папке, "images", содержится один текстовый файл "categories". Этот файл содержит название трёх папок ("Cars" , "Ships", "Trains") на Русском языке: Автомобили, Корабли, Поезда.

Структура каталога "images":

+ images
- cars
- ships
- trains
- categories.txt


Структура содержимого файла "categories.txt":

Автомобили
Корабли
Поезда


После обработки кодом имеются два массива:

Array
(
[
0] => Автомобили
[1] => Корабли
[2] => Поезда
)

Array
(
[
0] => cars
[1] => ships
[2] => trains
)


Вопрос.

Как связать эти два массива, принимая во внимание что:
1) папки сортируются по алфавиту;
2) названия папок на Русском языке тоже буду сортироваться по алфавиту;
3) названия категорий на Русском языке будут удаляться/переименовываться;
4) папки тоже будут удаляться/переименовываться (ну это само собой);

Т.е при создании категории "Самолеты", создается папка "Airplane"

Получаем следующие массивы:

Array
(
[
0] => Автомобили
[1] => Корабли
[2] => Поезда
[3] => Самолеты
)

Array
(
[
0] => airplane
[1] => cars
[2] => ships
[3] => trains
)


При выборе категории "Автомобили", попадаем в папку "airplane"

Нужно чтобы было так:

Array
(
[
0] => Автомобили
[1] => Корабли
[2] => Поезда
[3] => Самолеты
)

Array
(
[
3] => airplane
[0] => cars
[1] => ships
[2] => trains
)


Это к примеру. Может быть и по другому. Внешний вид массивов меня мало беспокоит. Главное правельная связь между названиями категорий и папками.

Сортировка массивов папок тоже особо не волнует. Все равно как.
Больше волнует сортировка категорий на Русском языке и связь их с папками, то есть с массивами папок.

Как сделать сортировку массивов я знаю. Но вот как правильно связать с папками, пока незнаю.

Структура массива папок не стабильна. При создании каждой новой папки она меняется. Это усложняет задачу.

Помогите плиз, если есть желание и возможность.



Спустя 13 минут, 39 секунд (18.06.2011 - 03:01) walerus написал(а):
А кто или что мешает сделать файл categories.txt не текстовым а сериализированным массивом допустим ?...

и массив формировать по принципу

Array
(
[
cars] => Автомобили
[ships] => Корабли
[trains] => Поезда
[airplane] => Самолеты
)

Спустя 15 минут, 30 секунд (18.06.2011 - 03:17) gen552 написал(а):
Я не зря завел текстовый файл.
Название категории будет создаваться не ручками, а методом POST. То есть банально в текстовом поле: Самолёты -> создать... и на сервер.
А записать то его куда то нужно...

Спустя 28 минут, 22 секунды (18.06.2011 - 03:45) Игорь_Vasinsky написал(а):
какая то не реальная затея biggrin.gif папки в массиве сортируются по имени....
тогда и инфу в текст. файл не по сортировке а в нужном порядке пиши, а проще - как walerus - показал, ключи - название папок - элементы - выдёргивай и в файл пиши - по строчно, так твой ассициотивный массив - будет взаимодействовать с индексным (содержимое текстового файла.)

UPD: след-но и с этим:
Цитата
Как связать эти два массива, принимая во внимание что:
1) папки сортируются по алфавиту;
2) названия папок на Русском языке тоже буду сортироваться по алфавиту;
3) названия категорий на Русском языке будут удаляться/переименовываться;
4) папки тоже будут удаляться/переименовываться (ну это само собой);

можно будет управиться

Спустя 40 минут, 27 секунд (18.06.2011 - 04:25) gen552 написал(а):
Не получится так.

Это как две таблицы. В одной - имена, в другой - телефоны. Эти две таблицы можно связать одинаковыми идентификаторами. Порядковый номер идентификаторов имён, соответствует порядковому номеру идентификаторов телефонов. Можно и сортировать и удалять и создавать и.т.д.

В моем же случае, содержимое папки Images будет "постоянно" двигаться. А значит массив ключей папок тоже, а массив ключей категорий в файле статичен (бог с той сортировкой), потому что название каталога всегда записывается в конец.

Т.е. в текстовом файле (в массиве) числовые индексы всегда будут по порядку. А вот массив с папками всегда будет перемещаться.

Задача не в сортировке. А в синхронности. Чтобы ключи названий категорий соответствовали ключам папок.

А вот потооооом, можна эти два массива объденить в один по ключам.

И вот тут уже в качестве ключей взять название папок, а значение массивов название котегорий. Т.е. как предложил walerus

Спустя 5 часов, 3 минуты, 5 секунд (18.06.2011 - 09:29) walerus написал(а):
В опщем, не знаю... Исходя из твоих слов -
Цитата
Название категории будет создаваться не ручками, а методом POST. То есть банально в текстовом поле: Самолёты -> создать... и на сервер.


получился скрипт -

.... Админ!!! unsure.gif что за лажа, не работает PHP обрамление, ставлю в цитате ))))))

Цитата
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<?
error_reporting(E_ALL);
define('ROOT', dirname(__FILE__).'/');

$set_img_folder = 'images';

if ( isset($_REQUEST['eng_name']) && trim($_REQUEST['eng_name']) != '' &&
  isset($_REQUEST['rus_name']) && trim($_REQUEST['rus_name']) != '' &&
  isset($_REQUEST['test_field']) && trim($_REQUEST['test_field']) == 'create' )
  {
    $tmp_name_dir = trim($_REQUEST['eng_name']);
   
   
    // Проверяем есть ли такая директория
    if ( file_exists( ROOT. $set_img_folder .'/'. $tmp_name_dir) )       
      die( 'Такая директория есть !' );
   
    // Создаем директорию и добавляем названия в массив
    echo "Создаем директорию\n<br>"; flush();
    if (@mkdir( ROOT. $set_img_folder .'/'. $tmp_name_dir ) )
      chmod( ROOT. $set_img_folder .'/'. $tmp_name_dir, 0777 );
    else       
      die( 'Директория Не создалась !!!' );
   
    echo "Директория создалась\n<br>"; flush();
   
    ## Обновляем массив
    // Загружаем файл
    if ( file_exists( ROOT. $set_img_folder .'/categories.txt' ) )
      $categories = unserialize( file_get_contents( ROOT. $set_img_folder .'/categories.txt' ) );     
    else
      $categories = array();
   
    $categories[$tmp_name_dir] = trim ($_REQUEST['rus_name']);
   
    // Записываем файл
    file_put_contents( ROOT. $set_img_folder .'/categories.txt', serialize($categories) );
     
    echo "Файл обновлен\n<br>"; flush();
  }
else
  {
    // Рисуем форму
    ?>   
    <form method="POST" action="">         
    <table border="0" >
      <tr>
        <td>&nbsp;Введите Английское название папки:</td>
        <td> <input type="text" name="eng_name" size="50"></td>
      </tr>
      <tr>
        <td>&nbsp;Введите Русское название папки:</td>
        <td><input type="text" name="rus_name" size="50"></td>
      </tr>
      <tr>
        <td colspan="2">&nbsp;
          <input type="hidden" value="create" name="test_field">
          <input type="submit" value="Создать">
        </td>
      </tr>
    </table>   
    </form>   
    <?
  }
?>
</body>
</html>


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

Дальше вопросы ))
Почему
Цитата
В моем же случае, содержимое папки Images будет "постоянно" двигаться. А значит массив ключей папок тоже, а массив ключей категорий в файле статичен (бог с той сортировкой), потому что название каталога всегда записывается в конец.


название каталога записывается в конец ? Если нужно то его можно писать как в перед так и в зад, если это необходимо...

Ну или на самый крайний случай, пиши прямо в создаваемую папку, файлик, типа my_folder_name.txt, и в ней прописывай Русский аналог названия...

Спустя 45 минут, 29 секунд (18.06.2011 - 10:14) linker написал(а):
gen552
То как ты это хочешь сделать - нереально. У папок и файла должно быть что-то общее. А общее для них может быть только английские названия папок. И нет никакой разницы POST'ом будет передаваться или ещё как, к сути дела не имеет ниакого отношения.

Спустя 1 час, 38 минут, 31 секунда (18.06.2011 - 11:53) gen552 написал(а):
Ну а как по Вашему здесь это сделали?
http://wallpapers.volgograd.biz/

Нажимаем на категорию Авиация и наблюдаем URL.
http://wallpapers.volgograd.biz/wgallery_list.php?gallery=14_avia&page=1&sort=5

Кстати, ответ в самом URL. Интересно, догадаетесь или нет? smile.gif

Хотя я уже знаю два способа. И по красивее чем здесь.
Опробую на практике - отпишусь.

Спустя 2 часа, 8 минут, 1 секунда (18.06.2011 - 14:01) tatti написал(а):
жду с нетерпением rolleyes.gif tongue.gif

Спустя 4 часа, 34 минуты, 12 секунд (18.06.2011 - 18:35) linker написал(а):
Уверен, что сделано без всяких дурацких categories.txt

Спустя 3 часа, 42 минуты, 56 секунд (18.06.2011 - 22:18) gen552 написал(а):
Цитата (linker @ 18.06.2011 - 15:35)
Уверен, что сделано без всяких дурацких categories.txt

Дело не в дурацком categories.txt. Можно было в XML всё хранить или в БД.
На том сайте скорее всего так и сделано. В любом случае названия категорий надо где то хранить.

Спустя 5 минут, 8 секунд (18.06.2011 - 22:23) Игорь_Vasinsky написал(а):
Да там вобычном html сделано меню, без твоих заморочек.
Либо динамически формируется из бд с таблицей типа

id  | cat_name | link_name


в этом случае и сортировку в алфавитном порядке можно на автомат поставить.

Спустя 1 час, 23 минуты, 46 секунд (18.06.2011 - 23:47) linker написал(а):
А какие у тебя сложности хранить связи русское название - английское название папки? Нет никакой разницы где это будет храниться, главное - это их связь, всё остальное реализация.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.