За последние 24 часа нас посетил 18191 программист и 1601 робот. Сейчас ищут 894 программиста ...

Ассоциативный массив, сравнение вывод...

Тема в разделе "PHP для новичков", создана пользователем Panter7777, 23 дек 2010.

  1. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Один я не втыкаю, чего автору надо?
     
  2. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Вообщем задача такая в целом!
    Есть список :
    mt-2-4
    mt-5a-2
    pr-29-5
    pr-5-19
    sv-45-2
    .................. аж ~1000! передаются через <textarea>

    Нужно в этот список записать в БД в виде:
    МТ-2-4
    MT-5a-2
    ПР-29-5
    ПР-5-19
    СВ-45-2
    ..................и тд.

    вот что сделано:
    Код (Text):
    1. $street = $_POST['street'];
    2.  
    3.  
    4. $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК");
    5. //print_r($arr);
    6.  function changeCharacter($data)
    7. {
    8.         for ($i=0; $i<count($data); $i++){
    9.         $char = explode("\n", $data);
    10.                          }
    11.  
    12.  
    13. $list = join($char);       
    14. print ($list);
    15. $char1 = preg_split("/-\S+-*-*-*/", $list, -1, PREG_SPLIT_NO_EMPTY);
    16. $char2 = preg_split("/[^-\S][a-z]{1,}[^-]{1}/", $list);
    17.  
    18.  
    19. echo "CHAR3-";print_r($char1);
    20. echo "<br /> CHAR4-";print_r($char2);
    21.            
    22.             $arr2 = array_combine($char1,$char2);
    23.             echo "<br />ВЕСЬ Array-";
    24.             print_r($arr2);
    25.            
    26. };
    27. changeCharacter ($street);
    теперь есть два ассоц. масива :

    Код (Text):
    1.  
    2. 1.$arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК");
    3.  
    4.  
    5. 2.  ( [ob] => ob-28b-1-P-new-s2 [ bl] => -82-1-p-s [ gd] => -47-1-P-new-s [ mm] => -11b-5-P-new-s [ hsh] => -21`6-4-P-s [ mish] => -11-1-P-s [ gs] => -46a-1-P-new-s2 [ ob] => -5a-2-P-new-s3 [ lysk] => -8`24-3-p-s [ milo] => -33-2-P-s )
    Все что нужно сделать это сравнить два масива ключами и во втором массиве поменять их на РУСС буквы, далее записать все в базу с русскими бувами!
     
  3. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Panter7777
    ассоциативный массив скорее всего не пойдёт. на форуме Регулярных выражений два числовых массива, откуда можешь брать значения на английском, и переводить на русский перед занесением в БД
     
  4. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    А разве нельзя сравнить два ассоц. массива ключами($key) и если ключ($key) второго массива совпадает с ключем($key) первого, то ключ($key) второго поменть на значение($val)первого????
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    HTML:
    1. <?php
    2.  
    3. if($_SERVER['REQUEST_METHOD']=='POST'){
    4.     $street = explode("\n", $_POST['street']);
    5.  
    6.     $from=implode(range('A','Z'));
    7.     $from.=strtolower($from);
    8.     $to='АБСДЕФГГИЖКЛМНОПКРСТУВВХЮЗ';
    9.     $to.=$to;
    10.     $rezArr=array();
    11.     foreach($street as $v){
    12.         $rezArr[]=strtr($v, $from, $to);
    13.     }
    14.  
    15.     var_dump ($rezArr);
    16. }
    17.  
    18. ?>
    19. <!DOCTYPE html>
    20. </head>
    21. <form action='' method='POST'>
    22.    <textarea name='street' cols='10' rows='5'></textarea>
    23. <p><input type='submit' value='ОК' /></p>
    24. </form>
    25. </body>
    26. </html>
    Можно (и скорее всего даже нужно) заменить strtr на str_replace с массивами.
     
  6. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Volt(220)
    Спасибо за ответ, но я из этого примера мало что понял, как минимум непойму как он применим к моей задаче.

    Я тут пока что пытаю вот таким методом:
    Код (Text):
    1.  
    2. $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК");
    3.  
    4. $arr2 =Array ( "ob" => "ob-28b-1-P-new-s2", "bl" => "-82-1-p-s", "gd" => "-47-1-P-new-s", "mm" => "-11b-5-P-new-s", "hsh" => "-21`6-4-P-s", "mish" => "-11-1-P-s", "gs" => "-46a-1-P-new-s2", "ob" => "-5a-2-P-new-s3", "lysk" => "-8`24-3-p-s", "milo" => "-33-2-P-s" )
    5.  
    6. function changeCharacter ($data, $data2)
    7. {
    8.     foreach ($data AS $key=>$val)
    9.     {
    10.         foreach ($data2 AS $key2=>$val2) {
    11.                 if ($key == $key2) {
    12.                     $key2 = $val;      
    13.                            
    14.                            }
    15.                 else {$key2=$key2;}
    16.                         }
    17.         $arr3 = array($key2 => $val2);
    18.     }
    19. print_r($arr3);
    20. }
    21.  
    22.  
    23. changeCharacter ($arr, $arr2);
    И вот где-то я тут с циклами этими запутался...
     
  7. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Напишите входные данные и массив, который хотите получить. А то ничего не понятно, поэтому вам никто помочь не может, а задача решается тривиальнейшим способом. я просто уверен.
     
  8. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Есть два ассоц. массива:
    Код (Text):
    1.  
    2. $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК");
    3.  
    4. $arr2 =Array ( "ob" => "ob-28b-1-P-new-s2", "bl" => "-82-1-p-s", "gd" => "-47-1-P-new-s", "mm" => "-11b-5-P-new-s", "hsh" => "-21`6-4-P-s", "mish" => "-11-1-P-s", "gs" => "-46a-1-P-new-s2", "ob" => "-5a-2-P-new-s3", "lysk" => "-8`24-3-p-s", "milo" => "-33-2-P-s" )
    1. Нужно сранить ключи($key2) второго массива с ключами($key) первого. И если ключи совпадают $key2 ==$key; то $key2 = $key; и записать все в новый ассоц массив. $arr3 = array ("$key2(измененный)"=>"$val2(не меняется и не сравинвается )")
    что бы новый массив принял такой вид:
    Код (Text):
    1. $arr3 = array ("ОБ" => "-28b-1-P-new-s2", "БЛ" => "-82-1-p-s", "ГД" => "-47-1-P-new-s")
    2. А топом этот новый массив записать в БД. (Но это уже такое)
     
  9. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Ну наконец-то

    Код (Text):
    1. <?
    2. $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК");
    3.  
    4. $arr2 =Array ( "ob" => "ob-28b-1-P-new-s2", "bl" => "-82-1-p-s", "gd" => "-47-1-P-new-s", "mm" => "-11b-5-P-new-s", "hsh" => "-21`6-4-P-s", "mish" => "-11-1-P-s", "gs" => "-46a-1-P-new-s2", "ob" => "-5a-2-P-new-s3", "lysk" => "-8`24-3-p-s", "milo" => "-33-2-P-s" );
    5. $new = array();
    6. foreach($arr2 as $k => $v)
    7. {
    8.   if(isset($arr[$k]))
    9.   {
    10.     $new[$arr[$k]] = $v;
    11.   }
    12. }
    13.  
    14. print_r($new);
    15. /*
    16. Array
    17. (
    18.     [ОБ] => -5a-2-P-new-s3
    19.     [ГД] => -47-1-P-new-s
    20.     [ММ] => -11b-5-P-new-s
    21.     [ХШ] => -21`6-4-P-s
    22.     [МИШ] => -11-1-P-s
    23.     [ЛИСК] => -8`24-3-p-s
    24.     [МИЛО] => -33-2-P-s
    25. )
    26. */
     
  10. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Спасибо отлично, но ... у меня почему-то в цыкл не повторяется, при условии if(isset($arr[$k]))

    вот дебажу:
    Код (Text):
    1.  
    2. $new = array();
    3. foreach($arr2 as $k => $v)
    4. { echo "W"; // тут проверяю цыкл
    5.   if(isset($arr[$k]))
    6.   { echo "Q"; // тут проверяю цыкл c условием
    7.     $new[$arr[$k]] = $v;
    8.   }
    9. }
    10. echo "<br>ВОТ:";
    11. print_r ($new);

    вот что выходит:

    Код (Text):
    1.  
    2.  
    3. WQWWWWWWWWWWWWW // тоесть раз нашол и стал
    4.  
    5. ВОТ:Array ( [ОБ] => ob-28b-1-P-new-s2 ) // соответственно и результат
     
  11. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    А если написать условие if ($arr[$k] == $k), то ошибки вылазят:
    Код (Text):
    1.  
    2. foreach ($arr2 AS $k => $v)
    3. {
    4.   echo "W";
    5.   if ($arr[$k] == $k) // вот новое условие
    6.      {  echo "Q";
    7.     $new[$arr[$k]] = $v;
    8.      }
    9. }
    вот ошибки:
    Код (Text):
    1.  
    2. WW
    3. Notice: Undefined index: bl in /data/www/ctd/andy/test3.php on line 35
    4. W
    5. Notice: Undefined index: gd in /data/www/ctd/andy/test3.php on line 35
    6. W
    7. Notice: Undefined index: mm in /data/www/ctd/andy/test3.php on line 35
    8. W
    9. Notice: Undefined index: hsh in /data/www/ctd/andy/test3.php on line 35
    10. W
    11. Notice: Undefined index: mish in /data/www/ctd/andy/test3.php on line 35
    12. W
    13. Notice: Undefined index: gs in /data/www/ctd/andy/test3.php on line 35
    14. W
    15. Notice: Undefined index: ob in /data/www/ctd/andy/test3.php on line 35
    16. W
    17. Notice: Undefined index: lysk in /data/www/ctd/andy/test3.php on line 35
    18. W
    19. Notice: Undefined index: milo in /data/www/ctd/andy/test3.php on line 35
    20. W
    21. Notice: Undefined index: rudn in /data/www/ctd/andy/test3.php on line 35
    22. W
    23. Notice: Undefined index: mz in /data/www/ctd/andy/test3.php on line 35
    24. W
    25. Notice: Undefined index: ahm in /data/www/ctd/andy/test3.php on line 35
    26. W
    27. Notice: Undefined index: grig in /data/www/ctd/andy/test3.php on line 35
     
  12. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    хм я боюсь у вас данные несколько иные чем вы их на форум выложили. Мой скрипт хоть работает? Может у вас и пхп другой...
     
  13. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    То: <?=RPG?>


    вот моя версия - php - 5.2.11 !!!
    Работу Вашего скрипта я описал вот:
     
  14. Panter7777

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

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Вообщем сам поборол, но все равно всем спасибо:
    вот какой цыкл нужно было составить и кстате работало только после обрезания пробелов (trim)

    Код (Text):
    1.  
    2. $arr=( [pr] => ПР [mt] => МТ [sv] => СВ [ob] => ОБ [hsh] => ХШ [mish] => МИШ [] => [milo] => МИЛО [mm] => ММ [gd] => ГД [lysk] => ЛИСК [bl] => БЛ )
    3.  
    4. $arr2 = ( [ob] => ob-28b-1-P-new-s2 [ bl] => -82-1-p-s [ gd] => -47-1-P-new-s [ mm] => -11b-5-P-new-s [ hsh] => -21`6-4-P-s [ mish] => -1`4-4-P-s [ gs] => -46a-1-P-new-s2 [ ob] => -28a-6-P-new-s [ lysk] => -8`24-3-p-s [ milo] => -33-2-P-s [ rudn] => -6-4-P-s [ mz] => -8v-5-P-new-s2 [ ahm] => -5-9-P-s [ grig] => -41-1-P-s )
    5. $new = array();
    6.  
    7. foreach ($arr2 AS $k => $v)
    8. {   $k = trim($k);
    9.     foreach ($arr as $kk => $vv){
    10.     $kk =trim($kk);
    11.     if ($k == $kk) {$new[$arr[$k]] = $v;}
    12.     }
    13.  
    14. }
    15. print_r ($new);
    16.  
    17.  
    18. // Вот обработал и вывел!!!
    19. $new= ( [ОБ] => -28a-6-P-new-s [БЛ] => -82-1-p-s [ГД] => -47-1-P-new-s [ММ] => -11b-5-P-new-s [ХШ] => -21`6-4-P-s [МИШ] => -1`4-4-P-s [ЛИСК] => -8`24-3-p-s [МИЛО] => -33-2-P-s )