Вообщем задача такая в целом! Есть список : 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): $street = $_POST['street']; $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК"); //print_r($arr); function changeCharacter($data) { for ($i=0; $i<count($data); $i++){ $char = explode("\n", $data); } $list = join($char); print ($list); $char1 = preg_split("/-\S+-*-*-*/", $list, -1, PREG_SPLIT_NO_EMPTY); $char2 = preg_split("/[^-\S][a-z]{1,}[^-]{1}/", $list); echo "CHAR3-";print_r($char1); echo "<br /> CHAR4-";print_r($char2); $arr2 = array_combine($char1,$char2); echo "<br />ВЕСЬ Array-"; print_r($arr2); }; changeCharacter ($street); теперь есть два ассоц. масива : Код (Text): 1.$arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК"); 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 ) Все что нужно сделать это сравнить два масива ключами и во втором массиве поменять их на РУСС буквы, далее записать все в базу с русскими бувами!
Panter7777 ассоциативный массив скорее всего не пойдёт. на форуме Регулярных выражений два числовых массива, откуда можешь брать значения на английском, и переводить на русский перед занесением в БД
А разве нельзя сравнить два ассоц. массива ключами($key) и если ключ($key) второго массива совпадает с ключем($key) первого, то ключ($key) второго поменть на значение($val)первого????
HTML: <?php if($_SERVER['REQUEST_METHOD']=='POST'){ $street = explode("\n", $_POST['street']); $from=implode(range('A','Z')); $from.=strtolower($from); $to='АБСДЕФГГИЖКЛМНОПКРСТУВВХЮЗ'; $to.=$to; $rezArr=array(); foreach($street as $v){ $rezArr[]=strtr($v, $from, $to); } var_dump ($rezArr); } ?> <!DOCTYPE html> <html> <head> </head> <body> <form action='' method='POST'> <textarea name='street' cols='10' rows='5'></textarea> <p><input type='submit' value='ОК' /></p> </form> </body> </html> Можно (и скорее всего даже нужно) заменить strtr на str_replace с массивами.
Volt(220) Спасибо за ответ, но я из этого примера мало что понял, как минимум непойму как он применим к моей задаче. Я тут пока что пытаю вот таким методом: Код (Text): $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК"); $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" ) function changeCharacter ($data, $data2) { foreach ($data AS $key=>$val) { foreach ($data2 AS $key2=>$val2) { if ($key == $key2) { $key2 = $val; } else {$key2=$key2;} } $arr3 = array($key2 => $val2); } print_r($arr3); } changeCharacter ($arr, $arr2); И вот где-то я тут с циклами этими запутался...
Напишите входные данные и массив, который хотите получить. А то ничего не понятно, поэтому вам никто помочь не может, а задача решается тривиальнейшим способом. я просто уверен.
Есть два ассоц. массива: Код (Text): $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", ""=>"", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК"); $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): $arr3 = array ("ОБ" => "-28b-1-P-new-s2", "БЛ" => "-82-1-p-s", "ГД" => "-47-1-P-new-s") 2. А топом этот новый массив записать в БД. (Но это уже такое)
Ну наконец-то Код (Text): <? $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ", "ob"=>"ОБ", "hsh"=>"ХШ", "mish"=>"МИШ", "milo"=>"МИЛО", "mm"=>"ММ", "gd"=>"ГД", "lysk"=>"ЛИСК"); $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" ); $new = array(); foreach($arr2 as $k => $v) { if(isset($arr[$k])) { $new[$arr[$k]] = $v; } } print_r($new); /* Array ( [ОБ] => -5a-2-P-new-s3 [ГД] => -47-1-P-new-s [ММ] => -11b-5-P-new-s [ХШ] => -21`6-4-P-s [МИШ] => -11-1-P-s [ЛИСК] => -8`24-3-p-s [МИЛО] => -33-2-P-s ) */
Спасибо отлично, но ... у меня почему-то в цыкл не повторяется, при условии if(isset($arr[$k])) вот дебажу: Код (Text): $new = array(); foreach($arr2 as $k => $v) { echo "W"; // тут проверяю цыкл if(isset($arr[$k])) { echo "Q"; // тут проверяю цыкл c условием $new[$arr[$k]] = $v; } } echo "<br>ВОТ:"; print_r ($new); вот что выходит: Код (Text): WQWWWWWWWWWWWWW // тоесть раз нашол и стал ВОТ:Array ( [ОБ] => ob-28b-1-P-new-s2 ) // соответственно и результат
А если написать условие if ($arr[$k] == $k), то ошибки вылазят: Код (Text): foreach ($arr2 AS $k => $v) { echo "W"; if ($arr[$k] == $k) // вот новое условие { echo "Q"; $new[$arr[$k]] = $v; } } вот ошибки: Код (Text): WW Notice: Undefined index: bl in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: gd in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: mm in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: hsh in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: mish in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: gs in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: ob in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: lysk in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: milo in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: rudn in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: mz in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: ahm in /data/www/ctd/andy/test3.php on line 35 W Notice: Undefined index: grig in /data/www/ctd/andy/test3.php on line 35
хм я боюсь у вас данные несколько иные чем вы их на форум выложили. Мой скрипт хоть работает? Может у вас и пхп другой...
Вообщем сам поборол, но все равно всем спасибо: вот какой цыкл нужно было составить и кстате работало только после обрезания пробелов (trim) Код (Text): $arr=( [pr] => ПР [mt] => МТ [sv] => СВ [ob] => ОБ [hsh] => ХШ [mish] => МИШ [] => [milo] => МИЛО [mm] => ММ [gd] => ГД [lysk] => ЛИСК [bl] => БЛ ) $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 ) $new = array(); foreach ($arr2 AS $k => $v) { $k = trim($k); foreach ($arr as $kk => $vv){ $kk =trim($kk); if ($k == $kk) {$new[$arr[$k]] = $v;} } } print_r ($new); // Вот обработал и вывел!!! $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 )