За последние 24 часа нас посетили 18480 программистов и 1613 роботов. Сейчас ищут 2013 программистов ...

Рандом/Шанс выпадения

Тема в разделе "Сделайте за меня", создана пользователем Kela, 2 май 2018.

  1. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Добрый день.Можете помочь?Не могу понять как работает шанс выпадения?
    Например есть
    Хлеб, Вода, Масло,Чай.
    Хотелось бы сделать шанс выпадения, данные будут браться из бд!
    Например
    Хлеб: 30%
    Вода: 20%
    Масло: 5%
    Чай: 80%
     
  2. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    типа голосовалка?
     
  3. svch

    svch Активный пользователь

    С нами с:
    13 май 2012
    Сообщения:
    5
    Симпатии:
    0
    ну напишите 30 раз слово "хлеб", 20 раз слово "вода" и т.д. Получится массив из 100 значений. По нему делаете рандомный поиск.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Kela у тебя в сумме больше 100%, что ты имеешь ввиду?
     
  5. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    как по мне он имеет ввиду 80% это шанс выпадения значени. И чем выше шанс тем вероятней выпадет. Как реализовать идей нет.
     
    Kela нравится это.
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Не веселые шансы. Так и голодным можно остаться.
    80+30+20+5 = ххх
    rand(1, xxx) = чай
    или по отдельности нужно?
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    То есть чай, хлеб и т.д. должны выпасть или не выпасть по отдельности, а не из общего списка?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    Реально, если это проценты, то почему сумма больше 100? )))

    Пытаюсь представить задачу графически: 1D пространство :) есть отрезок на прямой. Окладываем на нём 30, 20, 5 и 80 в произвольных единицах измерения: в сумме 135. Представим, что есть некий случайный механизм, ставящий точку на этом отрезке. Механизм выдает только целые числа!
    Плотность заполнения точками примерно равномерная, т.е. на малом количестве попыток конечно может оказаться, что все точки, скажем, в третьем отрезке (5 единиц) и это нормально! Но на больших числах вероятность попадания в этот отрезок будет примерно как 5/135.

    Сделаю за тебя эту курсовую, так и быть! На PHP:

    У нас есть входящие параметры: "вероятности" как массив имя => относительная_вероятность (целое число):
    PHP:
    1. $probability = [
    2.   'Хлеб' => 30,
    3.   'Вода' => 20,
    4.   'Масло' => 5,
    5.   'Чай' => 80
    6. ];
    Создадим мишень для стрельбы случайными числами - массив размера равного сумме вероятностей - заполним его указанием на цели.
    PHP:
    1. $target = [];
    2. foreach ($probability as $k => $v) {
    3.     $target = array_merge(
    4.         $target,
    5.         array_fill(0, $v, $k)
    6.     );
    7. }
    8. $len = count($target);
    В переменной $len у нас общая длина отрезка, в нашем частном случае это 135.

    "Случайный выстрел" должен быть в диапазоне от 0 до $len-1. А попадание в цель находится как
    PHP:
    1. $x = $target[ mt_rand(0, $len-1) ];
    Это будет словесное наименование как 'Хлеб', 'Вода' и т.д. с вероятностью случая заданной исходным массивом $probability.

    Тест:
    Устроим стрельбу, скажем, из 10000 выстрелов. Замерим процент попадания в каждую цель.
    PHP:
    1. $results = [];
    2. for ($i=0; $i < 10000; $i++) {
    3.     $x = $target[ mt_rand(0, $len-1) ];
    4.     if (isset($results[$x])) {
    5.         $results[$x]++;
    6.     } else {
    7.         $results[$x] = 1;
    8.     }
    9. }
    10. $total = array_sum($results);
    11. echo $total."\n";
    12.  
    13. foreach ($probability as $k => $v) {
    14.   $pct = ($results[$k] / $total) * 100;
    15.   echo "{$k} => {$v}, {$pct}%\n";
    16. }
    В $total сумма выстрелов, чисто для проверки (это 10000).
    Для каждой цели будет выведен "вес" в произвольных входных единицах и фактический %% попадания в тестовой серии.

    Конец.
     
    Dimon2x и Dron-Boy нравится это.
  9. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Это круто)
     
  10. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Заполнять массив не благородное дело
    в первом foreach суммируем $v
    дальше $rand = rand(1, $sum)
    и второй foreach с проверками
    Нужно тестить
    PHP:
    1. $pos = 1;
    2. $res = '';
    3. foreach($probability as $k => $v) {
    4.     if($rand >= $pos && $rand <= $v) {
    5.         $res = $k;
    6.         break;
    7.     }
    8.     $pos += $v;
    9. }
     
  11. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    PHP:
    1. $probabilities = [
    2.   'Хлеб' => 30,
    3.   'Вода' => 20,
    4.   'Масло' => 5,
    5.   'Чай' => 80,
    6.   'Модератор Гей' => 120
    7. ];
    8.  
    9. $extractProbability = function($randomIsAPower) use($probabilities){
    10.     $propbabilityMax = 0;
    11.     foreach($probabilities as $name => $chance)
    12.         if(($propbabilityMax += $chance) >= $randomIsAPower)
    13.             return $name;
    14. };
    15.  
    16. $maxRange = array_sum($probabilities);
    17.  
    18. $results = array_fill_keys(array_keys($probabilities), null);
    19.  
    20. $generations = 10000;
    21.  
    22. for($i=0;$i<$generations;$i++){
    23.     $results[$extractProbability(rand(1,$maxRange))]++;
    24. }
    25.  
    26. foreach($results as $name=>$total){
    27.     print $name . ' total '.$total.' with '.number_format(($total / $generations * 100), 2, '.', ''). '%' .PHP_EOL;
    28. }
    --- Добавлено ---
    @artoodetoo
    PHP:
    1.  array_fill(0, $v, $k)
    [​IMG]
     
  12. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    все бы хорошо.но нужно 1 позицию вывести(которое выпало)
     
  13. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Покушал вернулся смотрю все таки накосячил. Не быть мне пихапистом
    PHP:
    1. $probability = [
    2.     'Хлеб' => 30,
    3.     'Вода' => 20,
    4.     'Масло' => 5,
    5.     'Чай' => 80
    6. ];
    7.  
    8. $sum = 0;
    9. foreach($probability as $k => $v) $sum += $v;
    10.  
    11. $rand = rand(0, $sum);
    12.  
    13. $pos = 0;
    14. $res = '';
    15. foreach($probability as $k => $v) {
    16.     $next_pos = $pos + $v;
    17.     if($rand >= $pos && $rand <= $next_pos) {
    18.         $res = $k;
    19.         break;
    20.     }
    21.     $pos = $next_pos;
    22. }
    23. echo $res;
     
    #13 nospiou, 3 май 2018
    Последнее редактирование: 3 май 2018
  14. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    на постой Хлеб выпадает
     
  15. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  16. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    @Kela
    [​IMG]
    PHP:
    1. $result = $extractProbability(rand(1,$maxRange));
     
  17. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Да работает. Вроде как.Вопрос
    Как впилить сюды?
    PHP:
    1. <?
    2. if (!defined('DATALIFEENGINE'))
    3.     exit;
    4. define('RANDOM', ENGINE_DIR . '/modules/random');
    5. require_once RANDOM . '/config.php';
    6. $db->super_query("SET NAMES 'utf8'");
    7. header('Content-Type: application/x-javascript; charset=utf8');
    8. mysqli_set_charset($db, "utf8");
    9. $box        = isset($_GET['box']) ? ($_GET['box'] > 0 ? (int) $_GET['box'] : 0) : 0;
    10. $playername = empty($member_id['name']) ? '' : $member_id['name'];
    11. $boxcount   = $db->query('SELECT COUNT(*) FROM ' . BOX . ' WHERE id = "' . $box . '"');
    12. $boxcount   = $boxcount->fetch_row();
    13.  
    14. $itemcount = $db->query('SELECT COUNT(*) FROM ' . ITEM . ' WHERE id_box = ' . $box . '');
    15. $itemcount = $itemcount->fetch_row();
    16.  
    17. $q    = $db->query('SELECT server, item_name, item_price FROM `' . BOX . '` WHERE id = ' . $box . '');
    18. $item = $db->get_row($q);
    19.  
    20. $q1  = $db->query('SELECT `' . $conf['rub']['cash'] . '` FROM `' . $conf['rub']['table'] . '` WHERE `' . $conf['rub']['name'] . '` = "' . $playername . '"');
    21. $rub = $db->get_row($q1);
    22.  
    23. $q2  = $db->query('SELECT `' . $conf['money']['balance'] . '` FROM `' . $conf['money']['table'] . '` WHERE `' . $conf['money']['username'] . '` = "' . $playername . '"');
    24. $money = $db->get_row($q2);
    25.  
    26. //Лесенка счастья:) \/\/
    27. if (!empty($member_id['name']))
    28.   {
    29.     if (isset($_GET['box']))
    30.       {
    31.         if ($boxcount[0] == 1)
    32.           {
    33.             if ($itemcount[0] > 0)
    34.               {
    35.                 if ($item['item_price'] < $rub[$conf['rub']['cash']] or $item['item_price'] == $rub[$conf['rub']['cash']])
    36.                   {
    37.                     $new_balance = intval($rub[$conf['rub']['cash']]) - $item['item_price'];
    38.                     $db->query('UPDATE `' . $conf['rub']['table'] . '` SET `' . $conf['rub']['cash'] . '` = "' . $new_balance . '" WHERE `' . $conf['rub']['name'] . '` = "' . $playername . '"') or die('Возникла ошибка при отрытия кейса. Обратитесь к администратору! ' . mysql_error($connect));
    39.                     $result = $db->query('SELECT id FROM ' . ITEM . ' WHERE id_box = "' . $box . '"');
    40.                     $all_entries = array();
    41.                     while ($entries = $db->get_row($result))
    42.                       {
    43.                         $all_entries[] = $entries['id'];
    44.                       }
    45.                     //Находим ПРИЗ! \/\/
    46.                     $priz = $all_entries[array_rand($all_entries)];
    47.                     $q    = $db->query('SELECT type, img, name, item, count, extra FROM ' . ITEM . ' WHERE id = "' . $priz . '"');
    48.                     $r    = $db->get_row($q);
    49.                    
    50.                     //Пока оставлю потом переделаю \/\/\/
    51.                    
    52.                    
    53.                     $sql      = 'SELECT img FROM ' . ITEM . ' WHERE id_box = "' . $box . '" ORDER BY RAND()';
    54.                     //Вывод 2 последние картинки
    55.                     $win_rand = array();
    56.                     for ($i = 0; $i < 2; $i++)
    57.                       {
    58.                         $s = $db->get_row($db->query($sql));
    59.                        
    60.                         $win_rand[] = array(
    61.                             'img' => '' . $s['img'] . ''
    62.                         );
    63.                        
    64.                       }
    65.                    
    66.                    
    67.                     //Про коддинг)
    68.                     $rand = array();
    69.                     for ($i = 0; $i < 67; $i++)
    70.                       {
    71.                         $a = $db->get_row($db->query($sql));
    72.                        
    73.                         $rand[] = array(
    74.                             'img' => '' . $a['img'] . ''
    75.                         );
    76.                        
    77.                       }
    78.                    
    79.                     //:) Бог массивов
    80.                    
    81.                     $array1[] = array(
    82.                         'img' => '' . $r['img'] . '',
    83.                         'stop' => 1
    84.                     );
    85.                     $arr      = array_merge($rand, $array1);
    86.                     $arr      = array_merge($arr, $win_rand);
    87.                    
    88.                    
    89.                    
    90.                     $n = array(
    91.                         'status' => true,
    92.                         'priz' => array(
    93.                             'name' => '' . $r['name'] . '',
    94.                             'img' => '' . $r['img'] . '',
    95.                             'trade' => 0,
    96.                             'price' => $item['item_price']
    97.                         ),
    98.                         'data' => $arr
    99.                     );
    100.                     switch ($r['type'])
    101.                     {
    102.                         case "pokemon":
    103.                            
    104.                             $db->query('
    105.                        INSERT INTO `' . $conf['sc']['table'] . '`(
    106.                        `' . $conf['sc']['type'] . '`,
    107.                        `' . $conf['sc']['player'] . '`,
    108.                        `' . $conf['sc']['item'] . '`,
    109.                        `' . $conf['sc']['extra'] . '`,
    110.                        `' . $conf['sc']['amount'] . '`,
    111.                        `' . $conf['sc']['server'] . '`
    112.                        ) VALUES (
    113.                        "' . $r["type"] . '",
    114.                        "' . $playername . '",
    115.                        "' . $r["item"] . '",
    116.                        "' . $r["extra"] . '",
    117.                        "' . $r["count"] . '",
    118.                        "' . $item['server'] . '"
    119.                        )', $connect) or die('Возникла ошибка начисления покемона. Обратитесь к администратору! ' . mysqli_error());
    120.                            
    121.                             break;
    122.                         case "item":
    123.                            
    124.                             $itemid = empty($r["item"]) ? 0 : str_replace('.', ':', $r["item"]);
    125.                            
    126.                             $db->query('
    127.                        INSERT INTO `' . $conf['sc']['table'] . '`(
    128.                        `' . $conf['sc']['type'] . '`,
    129.                        `' . $conf['sc']['player'] . '`,
    130.                        `' . $conf['sc']['item'] . '`,
    131.                        `' . $conf['sc']['extra'] . '`,
    132.                        `' . $conf['sc']['amount'] . '`,
    133.                        `' . $conf['sc']['server'] . '`
    134.                        ) VALUES (
    135.                        "' . $r["type"] . '",
    136.                        "' . $playername . '",
    137.                        "' . $itemid . '",
    138.                        "' . $r["extra"] . '",
    139.                        "' . $r["count"] . '",
    140.                        "' . $item['server'] . '"
    141.                        )', $connect) or die('Возникла ошибка начисления предмета. Обратитесь к администратору! ' . mysqli_error());
    142.                            
    143.                             break;
    144.                         case "rub":
    145.                        
    146.                             $add_balance = intval(($rub[$conf['rub']['cash']]) - $item['item_price']) + $r["count"];
    147.                             $db->query('UPDATE `' . $conf['rub']['table'] . '` SET `' . $conf['rub']['cash'] . '` = "' . $add_balance . '" WHERE `' . $conf['rub']['name'] . '` = "' . $playername . '"') or die('Возникла ошибка при начислений денег. Обратитесь к администратору! ' . mysql_error($connect));
    148.                            
    149.                             break;
    150.                         case "money":
    151.                            
    152.                             $add_money = intval($money[$conf['money']['balance']]) + $r["count"];
    153.                             $db->query('UPDATE `' . $conf['money']['table'] . '` SET `' . $conf['money']['cash'] . '` = "' . $add_money . '" WHERE `' . $conf['money']['name'] . '` = "' . $playername . '"') or die('Возникла ошибка при начислений денег. Обратитесь к администратору! ' . mysql_error($connect));
    154.                            
    155.                             break;
    156.                         case "permgroup":
    157.                             // Нужно сделать запрос!
    158.                            
    159.                             break;
    160.                         default:
    161.                             $n = array(
    162.                                 'status' => false,
    163.                                 'text' => 'Возникла ошибка начисления выгрыша. Обратитесь к администратору!'
    164.                             );
    165.                             echo json_encode($n);
    166.                             exit;
    167.                     }
    168.                    
    169.                     echo json_encode($n);
    170.                     exit;
    171.                   }
    172.                 else
    173.                   {
    174.                     $n = array(
    175.                         'status' => false,
    176.                         'text' => 'Недостаточно денег на балансе.'
    177.                     );
    178.                     echo json_encode($n);
    179.                     exit;
    180.                   }
    181.               }
    182.             else
    183.               {
    184.                 $n = array(
    185.                     'status' => false,
    186.                     'text' => 'Ты слепой видишь написано нету товара, зайди позже!'
    187.                 );
    188.                 echo json_encode($n);
    189.                 exit;
    190.               }
    191.           }
    192.         else
    193.           {
    194.             $n = array(
    195.                 'status' => false,
    196.                 'text' => 'Несуществующий сундук.'
    197.             );
    198.             echo json_encode($n);
    199.             exit;
    200.           }
    201.       }
    202.     else
    203.       {
    204.         $n = array(
    205.             'status' => false,
    206.             'text' => 'А где сундук то?'
    207.         );
    208.         echo json_encode($n);
    209.         exit;
    210.       }
    211.    
    212.   }
    213. else
    214.   {
    215.     $n = array(
    216.         'status' => false,
    217.         'text' => 'Войдите в магазин чтобы открыть кейс!'
    218.     );
    219.     echo json_encode($n);
    220.     exit;
    221.   }
     
  18. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Как-нибудь, например. Сделать чайку, сесть за кампуктер, развернуть notepad++ и закодить черт тебя дери.
    Или подготовить бабло.
     
    #18 Abyss, 3 май 2018
    Последнее редактирование: 3 май 2018
  19. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    PHP:
    1. <?php
    2.  
    3. if(!defined('DATALIFEENGINE')) exit;
    4. define('RANDOM', ENGINE_DIR .'/modules/random');
    5. require_once RANDOM .'/config.php';
    6.  
    7. $box    = isset($_REQUEST['box']) ? ($_REQUEST['box'] > 0 ? (int) $_REQUEST['box'] : 0) : 0;
    8. $open    = isset($_POST['open']) ? ($_POST['open'] > 0 ? (int) $_POST['open'] : 0) : 0;
    9. $playername = empty($member_id['name']) ? '' : $member_id['name'];
    10.  
    11. $boxcount = $db->query('SELECT COUNT(*) FROM ' . BOX . ' WHERE id = "' . $box . '"');
    12. $boxcount = $boxcount->fetch_row();
    13.  
    14. if(!isset($_GET['box'])) {
    15.     $count = $db->query('SELECT COUNT(*) FROM ' . BOX . ''); //ПОМЕТКА: пока оставлю так потом переделаю
    16.     $c = $count->fetch_row();
    17.     $i    = 0;
    18.     $q    = $db->query('SELECT  id, server, item_img, item_name, item_price FROM `' . BOX . '` ORDER BY sort LIMIT 0, ' . $c[0] . '');
    19.  
    20.     while($r = $db->get_row($q))
    21.     {
    22.         $tpl->load_template('random/random.tpl');
    23.         $tpl->set('{id}', $r['id']);
    24.         $tpl->set('{item_img}', $r['item_img']);
    25.         $tpl->set('{item_name}', $r['item_name']);
    26.         $tpl->set('{item_price}', $r['item_price']);
    27.         $tpl->compile('content');
    28.         $tpl->clear();
    29.     }
    30.  
    31. } elseif($boxcount[0] > 0) {
    32.  
    33. if(!empty($member_id['name'])) {
    34.  
    35. $itemcount = $db->query('SELECT COUNT(*) FROM ' . ITEM . ' WHERE id_box = ' . $box . '');
    36. $itemcount = $itemcount->fetch_row();
    37.  
    38. $q    = $db->query('SELECT item_name, item_price FROM `' . BOX . '` WHERE id = ' . $box . '');
    39. $item = $db->get_row($q);
    40.     if($itemcount[0] > 0) {
    41.  
    42.             $q = $db->query('SELECT img, name, item, count FROM `' . ITEM . '` WHERE id_box = ' . $box . ' ORDER BY RAND()');
    43.  
    44.                 while($r = $db->get_row($q)) {
    45.                     $tpl->load_template('random/lottery-element-slider.tpl');
    46.                     $tpl->set('{img}', $r['img']);
    47.                     $tpl->compile('imgs');
    48.                     $tpl->clear();
    49.                 }
    50.                  
    51.  
    52.                 $q = $db->query('SELECT img, type, name, item, count FROM `' . ITEM . '` WHERE id_box = ' . $box . '');
    53.                 while($r = $db->get_row($q))
    54.                 {
    55.              
    56.                     switch($r['type']){
    57.                         case "pokemon":
    58.                             $content    = '<img src="' . $r['img'] . '" width="128px" height="128px">';
    59.                             $tpl->set('{item}', $content);
    60.                             break;
    61.                         case "item":
    62.                             $content = '<span style="color: blue; float: right;"><b>X' . $r['count'] . '</b></span>
    63.                            <img src="' . $r['img'] . '" width="128px" height="128px">';
    64.                             $tpl->set('{item}', $content);
    65.                             break;
    66.                         case "money":
    67.                             $content = '<img src="' . $r['img'] . '" width="128px" height="128px">';
    68.                             $tpl->set('{item}', $content);
    69.                             break;
    70.                         case "rub":
    71.                             $content = '<img src="' . $r['img'] . '" width="128px" height="128px">';
    72.                             $tpl->set('{item}', $content);
    73.                             break;
    74.                         case "permgroup":
    75.                             $content = '<img src="' . $r['img'] . '" width="128px" height="128px">';
    76.                             $tpl->set('{item}', $content);
    77.                             break;
    78.                         default:
    79.                         $content = '<img src="/templates/Default/random/style/img/icon/help.png" width="128px" height="128px">';  
    80.                         $tpl->set('{item}', $content);
    81.                         break;
    82.                     }
    83.                  
    84.                     $tpl->set('{name}', $r['name']);
    85.                     $tpl->load_template('random/lottery-element.tpl');
    86.                     $tpl->compile('items');
    87.                     $tpl->clear();
    88.          
    89.                 }
    90.                 $tpl->set('{box}', $box);
    91.                 $tpl->set('{item_price}', $item['item_price']);
    92.                 $tpl->set('{item_name}', strtolower($item['item_name']));
    93.                 $tpl->set('{items}', $tpl->result['items']);
    94.                 $tpl->set('{imgs}', $tpl->result['imgs']);
    95.                 $tpl->load_template('random/box.tpl');
    96.                 $tpl->compile('content');
    97.                 $tpl->clear();
    98.          
    99.             } else {
    100.             msgbox('<b>Ошибка</b>', 'Увы но товар закончился зайдите чуть позже!');
    101.         }
    102.     } else {
    103.         msgbox('<b>Ошибка</b>', 'Войдите чтобы просмотреть содержимое сундука.');
    104.     }
    105. } else {
    106.     msgbox('<b>Ошибка</b>', 'Сундук не найден!');
    107. }
    108.  
    109. function msg($arr, $lang1, $lang2){
    110.     $keys = array();
    111.     $values = array();
    112.     foreach($arr as $key => $value){
    113.         $keys[] = $key;
    114.         $values[] = $value;
    115.     }
    116.     $message = str_replace($keys, $values, $lang2);
    117.     msgbox($lang1, $message);
    118. }
    119.  
    120. ?>