Автор Тема: Грабли с массивом...  (Прочитано 3661 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Grape

  • Grappa grande
  • Ветеран
  • *****
  • Сообщений: 758
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.grape.com.ua
Грабли с массивом...
« : 14 Декабря 2003, 22:05:11 »
Пишу следующее:
$cfg[\'site_language_variant\'] = \'rus\';
echo $cfg[\'site_language_variant\'].\'
\';
$cfg[\'site_language_variant\'][\'rus\'] = \'Русский\';
echo $cfg[\'site_language_variant\'].\'
\';

Это выводит:
Цитировать
rus
Рus

Подскажите пожалуйста что я делаю не так? Почему меняется значение?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Грабли с массивом...
« Ответ #1 : 14 Декабря 2003, 22:30:29 »
Рассказать придется тебе.
Ибо я не вижу смысла в твоих действиях.
Прежде, чем ответить, что ты делаешь НЕ ТАК, хотелось бы знать, что ты делаешь вообще.
Ты уж не поленись написать - что ты хочешь, без этого кода, которые не имеет смысла, а своими словами.
А я тебе расскажу, как сделать, что ты хочешь.

Для начала тебе надо определиться - переменная $cfg[\'site_language_variant\'] - это массив или строка?

Оффлайн Grape

  • Grappa grande
  • Ветеран
  • *****
  • Сообщений: 758
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.grape.com.ua
Грабли с массивом...
« Ответ #2 : 14 Декабря 2003, 22:55:50 »
Вижу уже, что прогнал... нужно что-то типа:
$cfg[\'site_language_variant\'][0][\'default\']= \'rus\';
$cfg[\'site_language_variant\'][1][\'abbr\'] = \'rus\';
$cfg[\'site_language_variant\'][1][\'description\'] = \'Русский\';
$cfg[\'site_language_variant\'][2][\'abbr\'] = \'de\';
$cfg[\'site_language_variant\'][2][\'description\'] = \'Немецкий\';


Нужно чтобы проверялась переменная. Если вариант переменной присутствует в массиве ($cfg[\'site_language_variant\'][][\'abbr\']), то используется он, а если нет, то берется дефолтовое значение из массва.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Грабли с массивом...
« Ответ #3 : 14 Декабря 2003, 23:16:52 »
смсысла опять особо не понял.
смысл цифр, к примеру? Какую они несут нагрузку?
смысл первой строки?

от тебя толку не добиться, ты сам не представляешь, чего хочешь - будем телепатировать.
Я так понимаю, что аббр тебе нужен как ключ массива $cfg[\'site_language_variant\'], а дескрипшен будет значением.

$cfg[\'site_language_variant\'][\'rus\'] = \'Русский\';
$cfg[\'site_language_variant\'][\'de\'] = \'Немецкий\';

if (isset($cfg[\'site_language_variant\'][$lang])) echo $cfg[\'site_language_variant\'][$lang;
else $lang=\'\'rus;

как-то так.

Оффлайн Grape

  • Grappa grande
  • Ветеран
  • *****
  • Сообщений: 758
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.grape.com.ua
Грабли с массивом...
« Ответ #4 : 14 Декабря 2003, 23:28:10 »
Подскажите пожалуйста как можно сделать прверку по значению массива при
0 и i count($cfg[\'site_language_variant\'])
$cfg[\'site_language_variant\'][$i][\'abbr\'] == \'de\'

? in_array() не берет ассоциативные массивы.

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Грабли с массивом...
« Ответ #5 : 14 Декабря 2003, 23:37:29 »
Grape
Ты зря проигнорировал ответ Ромика, он тебе правильно советует.
А то, что ты хочешь, можно сделать только вручную перебрав массив. Ну или написав для этого свою рекурсивную функцию.

PS: in_array() отлично работает с ассоциативными массивами, просто нужно применять её по назначению и отличать ассоциативные массивы от многомерных.
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Грабли с массивом...
« Ответ #6 : 14 Декабря 2003, 23:45:03 »
Grape
проверку по значению массива сделать нельзя.
можо сделать проверку по значению ЭЛЕМЕНТА массива.
что я тебе и продемонстрировал.
Но, похоже, разум здесь бессилен...

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Грабли с массивом...
« Ответ #7 : 14 Декабря 2003, 23:52:46 »
[OFF]
Цитировать
RomikChef:
проверку по значению массива сделать нельзя.

Готов поспорить ;)[/OFF]
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Грабли с массивом...
« Ответ #8 : 14 Декабря 2003, 23:55:13 »
ну расскажи - что ты имеешь в виду.
я с удовольствием послушаю.

Оффлайн Grape

  • Grappa grande
  • Ветеран
  • *****
  • Сообщений: 758
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.grape.com.ua
Грабли с массивом...
« Ответ #9 : 15 Декабря 2003, 00:07:57 »
Цитировать
FreeSpace:
Ты зря проигнорировал ответ Ромика, он тебе правильно советует.

Понимаю я, я не проигнорировал, просто страница была открыта и я ее не обновил, когда пост писал...
Цитировать
RomikChef:
можо сделать проверку по значению ЭЛЕМЕНТА массива.

Так я и хочу.

Вот как должно быть: методом get передается переменная, если значение переменной присутствует среди значений массива, то тогда она участвует в формировании названия таблицы в базе данных, если не совпадает, тогда выбирается дефолтовое гначение и выборка проиcходит с ним -
$prefix_$lang_tabName
А его полное название используется в другом месте - для выбора языка.
Цитировать
RomikChef:
$cfg[\'site_language_variant\'][\'rus\'] = \'Русский\';
$cfg[\'site_language_variant\'][\'de\'] = \'Немецкий\';

В принципе такой вариант подходит :)
А дефолтовое можно использовать и как $cfg[\'site_language_variant\'][\'default\'] = \'rus\';
так как это все и нужно чтобы не прописывать во многих сценариях одно и тоже и не изменять везде если добавляется еще один вариант сайта на другом языке.

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Грабли с массивом...
« Ответ #10 : 15 Декабря 2003, 00:35:20 »
Цитировать
RomikChef:
ну расскажи - что ты имеешь в виду. я с удовольствием послушаю.

$arr1   = array (
    \
'test\'  => 1,
    \'foo\'   => array(\'alpha\', \'gamma\'),
    \'he-he\' => \'lol\'
);

$arr2   = array (
    \'test\'  => 0xFF,
    \'foo\'   => array(\'beta\', \'delta\'),
    \'he-he\' => \'lol\'
);

$arr3   = array (
    \'test\'  => 1,
    \'foo\'   => array(\'alpha\', \'gamma\'),
    \'he-he\' => \'lol\'
);

echo ($arr1 == $arr2) ? "TRUE<BR />\\n" : "FALSE<BR />\\n";
// Выведет "FALSE"

echo ($arr1 == $arr3) ? "TRUE<BR />\\n" : "FALSE<BR />\\n";
// Выведет "TRUE"

ИМХО, самая настоящая проверка по значению всего массива целиком :)
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Grape

  • Grappa grande
  • Ветеран
  • *****
  • Сообщений: 758
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.grape.com.ua
Грабли с массивом...
« Ответ #11 : 15 Декабря 2003, 00:35:23 »
Еще подскажите пожалуйста, как можно сделать видимой переменную, которая была объявлена вне функции не вводя ее как переменную функции? Т.е.
$cfg 1;
function 
echo_1()
{
    echo 
$cfg;
}

Огромное спасибо за помощь!

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Грабли с массивом...
« Ответ #12 : 15 Декабря 2003, 00:36:56 »

$cfg 
1;
function 
echo_1()
{
    global 
$cfg;
    echo 
$cfg;
}
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Grape

  • Grappa grande
  • Ветеран
  • *****
  • Сообщений: 758
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.grape.com.ua
Грабли с массивом...
« Ответ #13 : 15 Декабря 2003, 00:56:15 »
Всем спасибо - то, что доктор прописал! :)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28