Всем привет. Ситуация очень странная есть массив ($cur) в нем 2035 значений ( ....[2033] => РАД [2034] => СЕВ )) - это когда вывожу через print_r;//вывод всего массива если я вывожу только значения $cur = array_values($cur); print_r($cur)//вывод всех значений массива - выводит только 1970 значений (....[1968] => РАД [1969] => СЕВ )) так же если подсчитать count($cur) = 1970 значений. Куда куда деваються остальные??????? Вот сам код: Код (Text): <?php ini_set('display_errors',1); error_reporting(E_ALL); $do = fopen('bububu.txt', "a+") or die ('Немогу открыть файл'); $tr = file('bububu.txt'); $cu = implode($tr); //print_r ($tr); preg_match_all('#([a-z]+)(-[^ ]+)(?:\s|$)#sUi', $cu, $matches); /*$new = array(); $new = array_combine($matches[1], $matches[2]); print_r ($new);*/ $russ = array( "ob"=>"ОБ", "bg"=>"БГ", "gd"=>"ГД", "dn"=>"ДН", "gs"=>"ГС", "zg"=>"ЗГ", "lg"=>"ЛГ", "mm"=>"ММ", "mt"=>"МТ", "mz"=>"МЗ", "sv"=>"СВ", "po"=>"ПО", "oz"=>"ОЗ", "pr"=>"ПР", "armja"=>"АРМ", "ahm"=>"АХМ", "bazh"=>"БАЖ", "vrb"=>"ВРБ", "veres"=>"ВЕРЕС", "vish"=>"ВИШ", "gmy"=>"ГМЫ", "gorl"=>"ГОРЛ", "grig"=>"ГРИГ", "grsh"=>"ГРИШ", "ob"=>"ОБ", "ob"=>"ОБ", "dek"=>"ДЕК", "dndz"=>"ДНДЗ", "drag"=>"ДРАГ", "knz"=>"КНЗ", "kosh"=>"КОШ", "krush"=>"КРУШ", "mish"=>"МИШ", "novod"=>"НОВОД", "oln"=>"ОЛН", "privo"=>"ПРИВО", "pchi"=>"ПЧИЛ", "rev"=>"РЕВ", "ros"=>"РОС", "rudn"=>"РУДН", "rud"=>"РУД", "sun"=>"САН","sev"=>"СЕВ","sm"=>"СМ","slv"=>"СЛАВ","srk"=>"СРК","tr"=>"ТР","url"=>"УРЛ","hsh"=>"ХШ","br"=>"БР","budsh"=>"БУДЫЩ","ob"=>"ОБ", "byk"=>"БЫК", "vat"=>"ВАТ", "vys"=>"ВЫС", "vg"=>"ВЫГ", "grad"=>"ГРАД", "dan"=>"ДАН", "draz"=>"ДРАЗ", "zak"=>"ЗАК", "kash"=>"КАШ", "lavr"=>"ЛАВР", "lysk"=>"ЛИСК", "majak"=>"МАЯК", "milo"=>"МИЛО", "nik"=>"НИК", "bl"=>"БЛ", "rad"=>"РАД", "sab"=>"САБ", "cvt"=>"ЦВЕТ"); $cur = array(); foreach ($matches[1] as $k=>$v){ $v = trim($v); foreach ($russ as $kk=>$vv){ $kk = trim($kk); $vv = trim($vv); if ($v == $kk) {$cur[$k] = $vv;} } } $cur = array_values($cur); print_r($cur); // print_r($matches[2]); $a = count($cur);$b = count($matches[2]); echo $a."-".$b; $cur2 = array_combine($cur, $matches[2]); // echo '<pre>'.print_r($matches[1], true).'</pre>'; // echo '<pre>'.print_r($matches[2], true).'</pre>'; ?> Сам файл bububu.txt Код (Text): 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 ........и так 2035 записей
Apple ))))), да только смотри за последовательностью: Сначала просто - print_r($cur); выводит ( ....[2033] => РАД [2034] => СЕВ ); //вывожу весть массив а потом $cur = array_values($cur); print_r($cur); и вот теперь (....[1968] => РАД [1969] => СЕВ ));!!!!!!//вывожу все значения из массива И вот только что делаю поиск всех ключей со значением "МТ" $c = array_keys($cur, 'МТ');print_r($c); выводит ...[87] => 2020 [88] => 2031 ) тоесть ключи и значения после 1970-го он видит. Херня какая-то?!?!??! Может кто-то сталкивался, нид хелп.
Блин вот уже сравнения: $cur - весть массив; $cur2 - все значения массива $cur; Код (Text): $cur2 = array_values($cur); var_dump(array_diff($cur, $cur2)); выводит: // array(0) { } так же ищю по пустым занчениям: $c = array_keys($cur, ' ');print_r($c); // выводит Array ( ) !!!!!!//нет пустых значений Тоесть нет расхождений, ёпта что за нах....все шло как по маслу, а тут хня какая-то.
Я смотрю "пых" с массивами ну не хочет дружить ну никак! Вот пример: функции array_combine(); Два массива у каждого по 2035 значений: Код (Text): Array1 (........ [2033] => rad [2034] => sev ) Array2 (........ [2033] => -42`10-5-P-s [2034] => -19-2-P-s2 ) Делаю объединение массивов в один! Код (Text): $cur2 = array_combine($matches[1], $matches[2]); $s = count($cur2); echo $s;// показывает 62 записи
Ну наконец-то хоть что-то становится проясняться, выдает коегде ошибку Notice: Undefined offset: после: Код (Text): for ($i=0;$i<count($matches[2]);$i++){print_r ($cur[$i].$matches[2][$i]);} вот некоторые значения вылетают: Код (Text): ГС-41-1-P-new-sДРАГ-42-7-P-sАХМ-16v-2-P-s Notice: Undefined offset: 1664 in /data/www/ctd/andy/test4.php on line 48 -8-4-P-sГРИГ-31-1-P-sХШ-152-6-P-sХШ-154-2-P-sММ-23`27-5-P-new-sТР-6j-11-P-sТР-6j-5-P-s Notice: Undefined offset: 1671 in /data/www/ctd/andy/test4.php on line 48 -44-1-P-s Осталось рабобраться почему и исправить!!!
if ($v == $kk) {$cur[$k] = $vv;} раз здесь if, то вероятно иногда условие не выполняется, и в массиве каких-то ключей не хватает echo count(array(21312=>"bullshit")); // 1, а не 21312
VItalijs Ты абсолютно прав, как раз разобрался думал отпостить, как тут уже вижу - ты написал. Еще был прав Gromo!!! if ($v == $kk) {$cur[$k] = $vv;} // как раз кое где не хватало некоторых ключей, после ошибки Notice: Undefined offset: Начал проверять с конца в начало и нашол ..что Notice: Undefined offset: 1664 in - в первоначальном виде была [1664] =>"san", а в массиве $russ = array( этого ключа не было, вот условие и не выполнялось!!!! ФУХ. Осталось дело за малым. Не могу из двух равных по ключам массивов создать один!!! Код (Text): $a = count($cur);$b = count($matches[2]); echo "a:".$a." b:".$b; // выводит количество ключей - а: 2035 b: 2035 Код (Text): $cur2 = array_combine($cur, $matches[2]); //объединял эти два массива, один как ключи второй как значения $z = count($cur2);echo $z; // весь массив занял ровно 62 записи???!?!?! А как же 2035???? ох я и замахался.
если в первом массиве есть неуникальные элементы - результирующий массив создастся лишь из уникальных В мануале это не написано, зато написано в комментах к мануалу
Гляньте синтаксис правельный? Код (Text): for ($i=0;$i<count($matches[2]);$i++) { $address = $cur[$i].$matches[2][$i]; //echo $address."<br>"; $sql_check = mysql_query("select name from jek_address") or die (mysql_error()); $res = mysql_fetch_assoc($sql_check);if (!$res){echo mysql_error();} if ($res['name'] != $address){ $sql =mysql_query("insert into jek_address SET (name) values (".$cur[$i].$matches[2][$i].")"); } } if (!$sql){echo mysql_error();} Вообщем ошибку бьет - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values (СЕВ-19-2-P-s2)' at line 1 А если сам запрос вставить в phpmyadmin, то : Код (Text): Ошибка SQL-запрос: INSERT INTO jek_address SET( name ) VALUES ( СЕВ -19 -2 - P - s2 ) Ответ MySQL: Документация #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(name) values (СЕВ-19-2-P-s2)' at line 1 values (СЕВ-19-2-P-s2)' at line 1 - Что за символы????
Наконец-то сделал, всем большое спасибо за помощь. Может кому-то пригодится: Код (Text): for ($i=0;$i<count($matches[2]);$i++) { $address = $cur[$i].$matches[2][$i]; //echo $address."<br>"; $sql_check = mysql_query("select name from jek_address") or die (mysql_error()); $res = mysql_fetch_assoc($sql_check);if (!$res){echo mysql_error();} if ($res['name'] != $address){ $sql =mysql_query("insert into jek_address (name) values ('$address')"); } } if (!$sql){echo mysql_error();}