Forum Webscript.Ru
Программирование => PHP => Тема начата: Grape от 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
Подскажите пожалуйста что я делаю не так? Почему меняется значение?
-
Рассказать придется тебе.
Ибо я не вижу смысла в твоих действиях.
Прежде, чем ответить, что ты делаешь НЕ ТАК, хотелось бы знать, что ты делаешь вообще.
Ты уж не поленись написать - что ты хочешь, без этого кода, которые не имеет смысла, а своими словами.
А я тебе расскажу, как сделать, что ты хочешь.
Для начала тебе надо определиться - переменная $cfg[\'site_language_variant\'] - это массив или строка?
-
Вижу уже, что прогнал... нужно что-то типа:
$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\']), то используется он, а если нет, то берется дефолтовое значение из массва.
-
смсысла опять особо не понял.
смысл цифр, к примеру? Какую они несут нагрузку?
смысл первой строки?
от тебя толку не добиться, ты сам не представляешь, чего хочешь - будем телепатировать.
Я так понимаю, что аббр тебе нужен как ключ массива $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;
как-то так.
-
Подскажите пожалуйста как можно сделать прверку по значению массива при
i > 0 и i < count($cfg[\'site_language_variant\'])
$cfg[\'site_language_variant\'][$i][\'abbr\'] == \'de\'
? in_array() не берет ассоциативные массивы.
-
Grape
Ты зря проигнорировал ответ Ромика, он тебе правильно советует.
А то, что ты хочешь, можно сделать только вручную перебрав массив. Ну или написав для этого свою рекурсивную функцию.
PS: in_array() отлично работает с ассоциативными массивами, просто нужно применять её по назначению и отличать ассоциативные массивы от многомерных.
-
Grape
проверку по значению массива сделать нельзя.
можо сделать проверку по значению ЭЛЕМЕНТА массива.
что я тебе и продемонстрировал.
Но, похоже, разум здесь бессилен...
-
[OFF]
RomikChef:
проверку по значению массива сделать нельзя.
Готов поспорить ;)[/OFF]
-
ну расскажи - что ты имеешь в виду.
я с удовольствием послушаю.
-
FreeSpace:
Ты зря проигнорировал ответ Ромика, он тебе правильно советует.
Понимаю я, я не проигнорировал, просто страница была открыта и я ее не обновил, когда пост писал...
RomikChef:
можо сделать проверку по значению ЭЛЕМЕНТА массива.
Так я и хочу.
Вот как должно быть: методом get передается переменная, если значение переменной присутствует среди значений массива, то тогда она участвует в формировании названия таблицы в базе данных, если не совпадает, тогда выбирается дефолтовое гначение и выборка проиcходит с ним -
$prefix_$lang_tabName
А его полное название используется в другом месте - для выбора языка.
RomikChef:
$cfg[\'site_language_variant\'][\'rus\'] = \'Русский\';
$cfg[\'site_language_variant\'][\'de\'] = \'Немецкий\';
В принципе такой вариант подходит :)
А дефолтовое можно использовать и как $cfg[\'site_language_variant\'][\'default\'] = \'rus\';
так как это все и нужно чтобы не прописывать во многих сценариях одно и тоже и не изменять везде если добавляется еще один вариант сайта на другом языке.
-
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
\\n" : "FALSE
\\n";
// Выведет "FALSE"
echo ($arr1 == $arr3) ? "TRUE
\\n" : "FALSE
\\n";
// Выведет "TRUE"
ИМХО, самая настоящая проверка по значению всего массива целиком :)
-
Еще подскажите пожалуйста, как можно сделать видимой переменную, которая была объявлена вне функции не вводя ее как переменную функции? Т.е.
$cfg = 1;
function echo_1()
{
echo $cfg;
}
Огромное спасибо за помощь!
-
$cfg = 1;
function echo_1()
{
global $cfg;
echo $cfg;
}
-
Всем спасибо - то, что доктор прописал! :)