Добрый день! Моя задача массив $street переданного методом POST в формате : mt-12-2 sv-14-3 pr-19-5 1.разбить на состовляющие по типу: mt sv pr (это будет массив ключей) и -12-2 -14-3 -19-5 (это будет массив значений) 2.потом из этих двух массивов сделать один ассциат. массив вида: Array=("mt"=>"-12-2", "sv"=>"-14-3", "pr"=>"-19-5") 3.В конечном итоге Сравнить это с готовым ассоц. массивом Array2=("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",) 4.Ключи первго поменять на значения второго и занести их в базу! Сделал вот что : Код (Text): $street = $_POST['street']; $arr = array ("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",); //print_r($arr); function changeCharacter($data) { for ($i=0; $i<count($data); $i++){ $char = explode("\n", $data);} foreach ($char AS $val) { $char1 = preg_split("/-[0-9a-zA-zа-яА-Я]{1,}-[0-9]{1}$/", $val); $char2 = preg_split("/^[a-zA-Z]{2,5}/", $val); } $arr2 = array_combine($char1,$char2); print_r($arr2); }; changeCharacter ($street); print "<form action='' method='POST'> <textarea name='street' cols='10' rows='5'></textarea> <input type='submit' value='ОК' /> </form>"; Ввожу в форму : mt-12-2 sv-14-3 А получаю Array ( [sv] => [] => -14-3 ) Тоесть застрял на 2-м пункте не могу запихнуть все в аасоц. массив. ПОМОГИТЕ ПЛЗ
Спасибо большое, кавычки убрал все заработало!!! А array_flip не совсем мне подходит или я простоне понял как его праельно можно использовать, но Функция array_flip() "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив $arr не изменяется, а результирующий массив просто возвращается. Конечно, если в массиве присутствовали несколько элементов с одинаковыми значениями, учитываться будет только последний из них: Код (Text): $A=array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc"); $A=array_flip($A); // теперь $A===array("aaa"=>"b", "ccc"=>"c"); Вроде как не то.
Если есть одинаковые значения, то не подойдет, а если нет, то: PHP: <?php $street = $_POST['street']; $arr = array ("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",); $flipArr=array_flip($arr); echo $flipArr[$street];
А как сравнить массив с массивом по такому принцпу. Ну дапустим есть такой список: pr mt sv ..... и таких 1000 штук и есть вот такой массив: $arr = array ("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv", .... и та же 1000 шт.); Я через форму передаю список сразу всю 1000 шт. Код (Text): print "<form action='' method='POST'> <input type='text' name='street[]' value='' /> <input type='submit' value='ОК' /> </form>"; И оно должно сраснить и вывести мне уже не "pr, mt, sv", a "ПР, МТ, СВ, ....и тд " Вот это правельно name='street[]' ? или как это делается? И кстате повторений в массиве нет!!!
1)street[] можно использовать, если есть несколько полей ввода: HTML: <form action='' method='POST'> <input type='text' name='street[]' value='' /> <input type='text' name='street[]' value='' /> <input type='text' name='street[]' value='' /> <input type='text' name='street[]' value='' /> <input type='submit' value='ОК' /> </form> Тогда значения попадут в массив street[]. 2)Если надо загрузить много значений, то не лучше ли загрузить файл и его распарсить? 3)Если делать это через форму, то удобнее, как мне кажется, использовать textarea. В нее вводить значения через запятую (или любой другой разделитель). На сервере можно сделать $rezArr=array_intersect_key($arr, array_flip(explode(',', $_POST['street']));
Я так понимаю что код будет такой! Код (Text): $street = $_POST['street']; $arr = array ("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",); $rezArr=array_intersect_key($arr, array_flip(explode(',', $street))); echo $rezArr[$street]; print "<form action='' method='POST'> <textarea name='street' cols='10' rows='5'></textarea> <input type='submit' value='ОК' /> </form>"; $rezArr=array_intersect_key($arr, array_flip(explode(',', $street))); -- это парсит по запятым???
Сделал так: Код (Text): $arr = array ("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",); $rezArr=array_intersect_key($arr, array_flip(explode(',', $street))); var_dump ($rezArr[$street]); print "<form action='' method='POST'> <textarea name='street' cols='10' rows='5'></textarea> <input type='submit' value='ОК' /> </form>"; ввожу в поле <textarea> mt, sv, pr - возвращает NULL (без пробелов тоже самое)
С [$street] - я загнул, но var_dump ($rezArr); - при вводе в поле <textarea> mt, sv, pr - возвращает array(0) { }.
Сравнивать надо не ключи, а значения: Код (Text): $rezArr=array_intersect($arr, explode(',', $street)); собственно var_dump каждого действия позволяет быстро найти ошибку.
Вообщем задача такая в целом! Есть список : 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",); $rezArr=array_intersect_key($arr, array_flip(mb_ereg("^[a-zA-Z]{2,5}", (explode('\n', $street))))); var_dump ($rezArr); print "<form action='' method='POST'> <textarea name='street' cols='10' rows='5'></textarea> <input type='submit' value='ОК' /> </form>"; тут типо я делаю explode('\n', $street) - для парса по разделителю "перенос на новую строчку" далее - mb_ereg("^[a-zA-Z]{2,5}", (explode('\n', $street)) - то что спарсили забераем первые буквы до "-" далее - array_flip(mb_ereg("^[a-zA-Z]{2,5}", (explode('\n', $street)))) - мы сравнивам то что отфильтровали с массивом $arr; только теперь как это вывести (сейчас хотябы на экран) в переменные что б записать в БД
Ээээ... Оно работает?? 1) не '\n' а "\n" 2) mb_ereg не работает с массивами и не возвращает строк и массивов. 3) Вроде уже решили что array_flip не нужен. 4) http://ru.php.net/manual/en/function.strtr.php
Так придумал так: ввожу в поле <textarea> mt-12-2, sv-34-2, pr-19-5 - С новой строчки! на сервере нужно этот массив разобрать и превратить в ассоциативный по макету $key=mt $val=-12-2....."mt"=>"-12-2" и тд. И останеться только сравнить два ассоц. массива возможно даже array_flip'ом и поменять ключи $key=mt на $key=МТ!!! Логика правельная???
В общем решил пойти по другому пути: Через <textarea> отправляю pr-12-2 mt-23-2 (каждый с новой строчки) Код (Text): $street = $_POST['street']; //$arr = array ("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",); function changeCharacter($data) { for ($i=0; $i<count($data); $i++) $char = explode("\n", $data); foreach ($char AS $val) $char1 = preg_split("/^[a-zA-Z]{2,5}/", $val); $char2 = preg_split("/-[0-9a-zA-zа-яА-Я]{1,}-[0-9]{1}$/", $val); $return[] = $char1."=>".$char2; print_r ($return); } changeCharacter ($street); print "<form action='' method='POST'> <textarea name='street' cols='10' rows='5'></textarea> <input type='submit' value='ОК' /> </form>"; на выходе получаю Array ( [0] => Array=>Array ) А хочу получить mt=>-12-2 mt=>-23-2.... что бы потом загнать в ассоцю массив. Что не так я делаю, хотябы натолкните на мысль
Наконец-то я получаю два массива Код (Text): function changeCharacter($data) { for ($i=0; $i<count($data); $i++) $char = explode("\n", $data); foreach ($char AS $val) { $char1 = preg_split("/-[0-9a-zA-zа-яА-Я]{1,}-[0-9]{1}$/", $val); $char2 = preg_split("/^[a-zA-Z]{2,5}/", $val); } }; changeCharacter ($street); Осталось дело за маленьким сделать массив $char1 = key а $char2 = val - В новом ассоциативном масииве. Подскажите как? Как из двух простых массивов сделать один ассоц. массив????
Давайте для начала попробуем $arr = array ("pr"=>"ПР", "mt"=>"МТ", "sv"=>"СВ",); $street = $_POST['street']; echo strstr($street, $arr);
Моя задача массив $street переданного методом POST в формате : mt-12-2 sv-14-3 pr-19-5 1.разбить на состовляющие по типу: mt sv pr (это будет массив ключей) и -12-2 -14-3 -19-5 (это будет массив значений) 2.потом из этих двух массивов сделать один ассциат. массив вида: Array=("mt"=>"-12-2", "sv"=>"-14-3", "pr"=>"-19-5") 3.В конечном итоге Сравнить это с готовым ассоц. массивом Array2=("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",) Ключи первго поменять на значения второго и занести их в базу! Сделал вот что : Код (Text): $street = $_POST['street']; $arr = array ("ПР"=>"pr", "МТ"=>"mt", "СВ"=>"sv",); //print_r($arr); function changeCharacter($data) { for ($i=0; $i<count($data); $i++){ $char = explode("\n", $data);} foreach ($char AS $val) { $char1 = preg_split("/-[0-9a-zA-zа-яА-Я]{1,}-[0-9]{1}$/", $val); $char2 = preg_split("/^[a-zA-Z]{2,5}/", $val); } $arr2 = array_combine($char1,$char2); print_r($arr2); }; changeCharacter ($street); print "<form action='' method='POST'> <textarea name='street' cols='10' rows='5'></textarea> <input type='submit' value='ОК' /> </form>"; Ввожу в форму : mt-12-2 sv-14-3 А получаю Array ( [sv] => [] => -14-3 ) Тоесть застрял на 2-м пункте не могу запихнуть все в аасоц. массив. ПОМОГИТЕ ПЛЗ
Блин начинаю дебажить и не пойму где я провтыкиваю???? Код (Text): function changeCharacter($data) { for ($i=0; $i<count($data); $i++){ $char = explode("\n", $data);} echo "MASS"; print_r ($char); foreach ($char AS $val) { $char1 = preg_split("/-[0-9a-zA-zа-яА-Я]{1,}-[0-9]{1}$/", $val); $char2 = preg_split("/^[a-zA-Z]{2,5}/", $val); } echo "KEYS"; print_r ($char1)."<br>"; echo "VALS"; print_r ($char2); $arr2 = array_combine($char1,$char2); print_r($arr2); }; changeCharacter ($street); Вот что выводит: Код (Text): MASSArray ( [0] => mt-12-2 [1] => pr-18-4 ) KEYSArray ( [0] => pr [1] => ) VALSArray ( [0] => [1] => -18-4 ) Array ( [pr] => [] => -18-4 )
Походу ошибка в регулярных выражениях, так как split работает только со строками... а я разбиваю массив.