Forum Webscript.Ru

Программирование => PHP => Тема начата: Grape от 14 Декабря 2003, 22:05:11

Название: Грабли с массивом...
Отправлено: 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

Подскажите пожалуйста что я делаю не так? Почему меняется значение?
Название: Грабли с массивом...
Отправлено: Меняздесьдавнонет от 14 Декабря 2003, 22:30:29
Рассказать придется тебе.
Ибо я не вижу смысла в твоих действиях.
Прежде, чем ответить, что ты делаешь НЕ ТАК, хотелось бы знать, что ты делаешь вообще.
Ты уж не поленись написать - что ты хочешь, без этого кода, которые не имеет смысла, а своими словами.
А я тебе расскажу, как сделать, что ты хочешь.

Для начала тебе надо определиться - переменная $cfg[\'site_language_variant\'] - это массив или строка?
Название: Грабли с массивом...
Отправлено: Grape от 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\']), то используется он, а если нет, то берется дефолтовое значение из массва.
Название: Грабли с массивом...
Отправлено: Меняздесьдавнонет от 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 от 14 Декабря 2003, 23:28:10
Подскажите пожалуйста как можно сделать прверку по значению массива при
i > 0 и i < count($cfg[\'site_language_variant\'])
$cfg[\'site_language_variant\'][$i][\'abbr\'] == \'de\'
? in_array() не берет ассоциативные массивы.
Название: Грабли с массивом...
Отправлено: FreeSpace от 14 Декабря 2003, 23:37:29
Grape
Ты зря проигнорировал ответ Ромика, он тебе правильно советует.
А то, что ты хочешь, можно сделать только вручную перебрав массив. Ну или написав для этого свою рекурсивную функцию.

PS: in_array() отлично работает с ассоциативными массивами, просто нужно применять её по назначению и отличать ассоциативные массивы от многомерных.
Название: Грабли с массивом...
Отправлено: Меняздесьдавнонет от 14 Декабря 2003, 23:45:03
Grape
проверку по значению массива сделать нельзя.
можо сделать проверку по значению ЭЛЕМЕНТА массива.
что я тебе и продемонстрировал.
Но, похоже, разум здесь бессилен...
Название: Грабли с массивом...
Отправлено: FreeSpace от 14 Декабря 2003, 23:52:46
[OFF]
Цитировать
RomikChef:
проверку по значению массива сделать нельзя.

Готов поспорить ;)[/OFF]
Название: Грабли с массивом...
Отправлено: Меняздесьдавнонет от 14 Декабря 2003, 23:55:13
ну расскажи - что ты имеешь в виду.
я с удовольствием послушаю.
Название: Грабли с массивом...
Отправлено: Grape от 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 от 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
\\n" : "FALSE
\\n";
// Выведет "FALSE"

echo ($arr1 == $arr3) ? "TRUE
\\n" : "FALSE
\\n";
// Выведет "TRUE"
ИМХО, самая настоящая проверка по значению всего массива целиком :)
Название: Грабли с массивом...
Отправлено: Grape от 15 Декабря 2003, 00:35:23
Еще подскажите пожалуйста, как можно сделать видимой переменную, которая была объявлена вне функции не вводя ее как переменную функции? Т.е.
$cfg = 1;
function echo_1()
{
    echo $cfg;
}
Огромное спасибо за помощь!
Название: Грабли с массивом...
Отправлено: FreeSpace от 15 Декабря 2003, 00:36:56

$cfg = 1;
function echo_1()
{
    global $cfg;
    echo $cfg;
}
Название: Грабли с массивом...
Отправлено: Grape от 15 Декабря 2003, 00:56:15
Всем спасибо - то, что доктор прописал! :)