Смижу дома,звонит друг и говорит что нужно подправить файл ексель таблицы,и типо по данным составить смс рассылку.Имеется база данных ексель Столбцов там дохрена (7110) слева выводятся фамилии,спава телефоны,прричём в первом столбике скорее нет телефона чем есть,а во втором из 4500 записй нет только 20 телефонов.Записи могут повторяться как в первом столбике ,так и во втором.Необходимо склеить 4 столбца в 2 так чтобы: имя должно иметь дату рождения,убрать повторения и дать всем именам телефоны ,где они есть.Собственно сохранил эту вешь как чмл файл .Выделил вступление,ьело таблицы и завершение.Тело выглядит так: Стал набирать прогу,которая должна была создать правильный новый файл,в результате вышло в хмл такое Обломно что вроде правильно,но ексель упорно говорил что ошибка в таблице,хотя вывод вроде корректен.Вот сама прога: PHP: <?php $body=file_get_contents("body.xml"); $position=0;$counter=0; function getrow(){ global $body,$position; $st=strpos($body,"<Row ",$position); $st=strpos($body,"<Row ",$position); if(($st==false))return false; $end=strpos($body,"</Row>",$position); $a=$end+6-$st; $position=$end+3; return substr($body,$st,$a); }; $names1=array(); $names2=array(); $namesr=array(); $phonesr=array(); $nstylescr=array(); $nstylesdr=array(); $pstylescr=array(); $pstylesdr=array(); $phones1=array(); $phones2=array(); $nstylesc1=array(); $nstylesd1=array(); $nstylesd2=array(); $nstylesc2=array(); $pstylesc1=array(); $pstylesd1=array(); $pstylesd2=array(); $pstylesc2=array(); $pids1=array(); $nids2=array(); $pids2=array(); $rows=array(); for($i=0;$i<7109;$i++){ $rows[]=getrow(); if($i==1000)echo "$i=1000"; if($i==2000)echo "$i=2000"; if($i==3000)echo "$i=3000"; if($i==4000)echo "$i=4000"; if($i==5000)echo "$i=5000"; if($i==6000)echo "$i=6000"; if($i==7000)echo "$i=7000"; if($i==7108)echo "$i=7108"; }; unset($body); for($i=0;$i<sizeof($rows);$i++){ $row=$rows[$i]; $pos=0; $st=strpos($row,"<Cell",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $nstylesc1[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=strpos($row,"<Data",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $nstylesd1[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=$pos+1; $end=strpos($row,"<",$st); $a=$end-$st; $names1[$i]=trim(substr($row,$st,$a)); $names2[$i]=''; $phones2[$i]=''; $phones1[$i]=''; $pos=$end; if(substr_count($row,'ss:Index="3"')==0){ if(substr_count($row,"</Cell>")>1){ $st=strpos($row,"<Cell",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $pstylesc1[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=strpos($row,"<Data",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $pstylesd1[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=$pos+1; $end=strpos($row,"<",$st); $a=$end-$st; $phones1[$i]=trim(substr($row,$st,$a)); $pids1[]=$i; $pos=$end; if(substr_count($row,"</Cell>")>2){ $st=strpos($row,"<Cell",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $nstylesc2[$i]=trim(str_replace('ss:Index="3"','',substr($row,$st,$a))); $pos=$end; $st=strpos($row,"<Data",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $nstylesd2[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=$pos+1; $end=strpos($row,"<",$st); $a=$end-$st; $names2[$i]=trim(substr($row,$st,$a)); $nids2[]=$i; $pos=$end; if(substr_count($row,"</Cell>")>3){ $st=strpos($row,"<Cell",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $pstylesc2[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=strpos($row,"<Data",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $pstylesd2[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=$pos+1; $end=strpos($row,"<",$st); $a=$end-$st; $phones2[$i]=trim(substr($row,$st,$a)); $pids2=$i; $pos=$end; }; }; };}else{ if(substr_count($row,"</Cell>")>1){ $st=strpos($row,"<Cell",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $nstylesc2[$i]=trim(str_replace('ss:Index="3"','',substr($row,$st,$a))); $pos=$end; $st=strpos($row,"<Data",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $nstylesd2[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=$pos+1; $end=strpos($row,"<",$st); $a=$end-$st; $names2[$i]=trim(substr($row,$st,$a)); $nids2[]=$i; $pos=$end; if(substr_count($row,"</Cell>")>2){ $st=strpos($row,"<Cell",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $pstylesc2[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=strpos($row,"<Data",$pos)+5; $end=strpos($row,">",$st); $a=$end-$st; $pstylesd2[$i]=trim(substr($row,$st,$a)); $pos=$end; $st=$pos+1; $end=strpos($row,"<",$st); $a=$end-$st; $phones2[$i]=trim(substr($row,$st,$a)); $pos=$end; }; }; }; if($i==1000)echo "$i=1000"; if($i==2000)echo "$i=2000"; if($i==3000)echo "$i=3000"; if($i==4000)echo "$i=4000"; if($i==5000)echo "$i=5000"; if($i==6000)echo "$i=6000"; if($i==7000)echo "$i=7000"; //if($i==800)echo "$i=7108"; }; unset($rows); for($i=0;$i<sizeof($names1);$i++){ $namesr[]=$names1[$i]; $phonesr[]=$phones1[$i]; $nstylescr[]=$nstylesc1[$i]; $nstylesdr[]=$nstylesd1[$i]; if(!empty($pstylesc1[$i])){$pstylescr[]=$pstylesc1[$i];}else{$pstylescr[]=''; }; if(!empty($pstylesd1[$i])){$pstylesdr[]=$pstylesd1[$i];}else{$pstylesdr[]=''; }; if($i==1000)echo "\$i=1000"; if($i==2000)echo "\$i=2000"; if($i==3000)echo "\$i=3000"; if($i==4000)echo "\$i=4000"; if($i==5000)echo "\$i=5000"; if($i==6000)echo "\$i=6000"; if($i==7000)echo "\$i=7000"; if($i==7108)echo "\$i=7108"; }; for($i=0;$i<sizeof($nids2);$i++){ $namesr[]=$names2[$nids2[$i]]; $phone=$phones2[$nids2[$i]]; $nstylescr[]=$nstylesc2[$nids2[$i]]; $nstylesdr[]=$nstylesd2[$nids2[$i]]; $phonesr[]=$phone; if(!empty($phone)){ $pstylescr[]=$pstylesc2[$nids2[$i]]; $pstylesdr[]=$pstylesd2[$nids2[$i]]; }else{ $pstylescr[]=''; $pstylesdr[]=''; }; if($i==1000)echo "\$i=1000"; if($i==2000)echo "\$i=2000"; if($i==3000)echo "\$i=3000"; if($i==4000)echo "\$i=4000"; if($i==5000)echo "\$i=5000"; if($i==6000)echo "\$i=6000"; if($i==7000)echo "\$i=7000"; if($i==8000)echo "\$i=8000"; if($i==9000)echo "\$i=9000"; if($i==10000)echo "\$i=10000"; if($i==11000)echo "\$i=11000"; if($i==12000)echo "\$i=12000"; if($i==13000)echo "\$i=13000"; if($i==14000)echo "\$i=14000"; if($i==15000)echo "\$i=15000"; if($i==16000)echo "\$i=16000"; }; $counter=sizeof($namesr)-1; echo("sizeof=$counter"); for($i=0;$i<sizeof($namesr)-1;$i++){ for($j=$i+1;$j<sizeof($namesr);$j++){ if(substr_count(strtolower($namesr[$i]),strtolower($namesr[$j]))>0){ if(!empty($phonesr[$j]))$phonesr[$i]=$phonesr[$j]; $counter--; }else{ }; }; if($i==1000)echo "\$i=1000"; if($i==2000)echo "\$i=2000"; if($i==3000)echo "\$i=3000"; if($i==4000)echo "\$i=4000"; if($i==5000)echo "\$i=5000"; if($i==6000)echo "\$i=6000"; if($i==7000)echo "\$i=7000"; if($i==8000)echo "\$i=8000"; if($i==9000)echo "\$i=9000"; if($i==10000)echo "\$i=10000"; if($i==11000)echo "\$i=11000"; if($i==12000)echo "\$i=12000"; if($i==13000)echo "\$i=13000"; if($i==14000)echo "\$i=14000"; if($i==15000)echo "\$i=15000"; if($i==16000)echo "\$i=16000"; }; echo("counter=$counter"); unset($names1); unset($phones1); unset($names2); unset($phones2); for($i=0;$i<sizeof($namesr)-1;$i++){ for($j=$i+1;$j<sizeof($namesr);$j++){ if($namesr[$j]<$namesr[$i]){ $buf=$namesr[$i]; $namesr[$i]=$namesr[$j] ; $namesr[$j]=$buf; $buf=$phonesr[$i]; $phonesr[$i]=$phonesr[$j]; $phoners[$j]=$buf; $buf=$nstylescr[$i]; $nstylescr[$i]=$nstylescr[$j]; $nstylescr[$j]=$buf; $buf=$nstylesdr[$i]; $nstylesdr[$i]=$nstylesdr[$j]; $nstylesdr[$j]=$buf; $buf=$pstylescr[$i]; $pstylescr[$i]=$pstylescr[$j]; $pstylescr[$j]=$buf; $buf=$pstylesdr[$i]; $pstylesdr[$i]=$pstylesdr[$j]; $pstylesdr[$j]=$buf; }; }; if($i==1000)echo "\$i=1000"; if($i==2000)echo "\$i=2000"; if($i==3000)echo "\$i=3000"; if($i==4000)echo "\$i=4000"; if($i==5000)echo "\$i=5000"; if($i==6000)echo "\$i=6000"; if($i==7000)echo "\$i=7000"; if($i==8000)echo "\$i=8000"; if($i==9000)echo "\$i=9000"; if($i==10000)echo "\$i=10000"; if($i==11000)echo "\$i=11000"; if($i==12000)echo "\$i=12000"; if($i==13000)echo "\$i=13000"; if($i==14000)echo "\$i=14000"; if($i==15000)echo "\$i=15000"; if($i==16000)echo "\$i=16000"; }; $final=''; for($i=0;$i<=$counter;$i++){ $final.='<Row ss:AutoFitHeight="0" ss:Height="12.1875">'."\r\n"; $final.="<Cell $nstylescr[$i] ><Data $nstylesdr[$i] >$namesr[$i]</Data></Cell>"."\r\n"; if(!empty($phonesr[$i])){ $final.="<Cell $pstylescr[$i] ><Data $pstylesdr[$i] >$phonesr[$i]</Data></Cell>"."\r\n"; }; $final.="</Row>"; if($i==1000)echo "\$i=1000"; if($i==2000)echo "\$i=2000"; if($i==3000)echo "\$i=3000"; if($i==4000)echo "\$i=4000"; if($i==5000)echo "\$i=5000"; if($i==6000)echo "\$i=6000"; if($i==7000)echo "\$i=7000"; if($i==8000)echo "\$i=8000"; if($i==9000)echo "\$i=9000"; if($i==10000)echo "\$i=10000"; if($i==11000)echo "\$i=11000"; if($i==12000)echo "\$i=12000"; if($i==13000)echo "\$i=13000"; if($i==14000)echo "\$i=14000"; if($i==15000)echo "\$i=15000"; if($i==16000)echo "\$i=16000"; }; $final.="</Table>" ; $prefix=file_get_contents("prefix.xml"); $posix=file_get_contents("posix.xml"); $final=$prefix.$final.$posix; file_put_contents("final.xml",$final); echo(substr_count($final,"<Row ")) ; ?> В общем после 3 часов думанья прога родила хмл файл,только вот ексель ругается.В чем дело?[/url]
либо я ничего не понял, либо у автора трава забориста =) копируем столбцы C и D в новый лист, сортируем - так уйдут пустые строки, копируем обратно вставляя снизу и все =) дело шито-крыто. Потом тупо копипастим это в .txt и бьем по табам и строкам в многомерный массив, херим дубли (до/после/во время) через встроенную функцию пхп - http://ru.php.net/manual/en/function.array-unique.php усе hотово, шеф! а xml тут зачем?
порадовало Код (Text): if($i==1000)echo "\$i=1000"; if($i==2000)echo "\$i=2000"; if($i==3000)echo "\$i=3000"; if($i==4000)echo "\$i=4000"; if($i==5000)echo "\$i=5000"; if($i==6000)echo "\$i=6000"; if($i==7000)echo "\$i=7000"; if($i==8000)echo "\$i=8000"; if($i==9000)echo "\$i=9000"; if($i==10000)echo "\$i=10000"; if($i==11000)echo "\$i=11000"; if($i==12000)echo "\$i=12000"; if($i==13000)echo "\$i=13000"; if($i==14000)echo "\$i=14000"; if($i==15000)echo "\$i=15000"; if($i==16000)echo "\$i=16000"; напоминает стиль кодеров, которым платят за количество строк кода. echo('$i='.$i);
antonn Давай,скажи мыло своё-сброшу! igordata Не врубаюсь я в ексель,можешь короче форматнуть чуток,если я тебе тоже на почту скину? engager Потому что база здоровеная и программа считала несколько часов,я думал что она повисла.В результате за 4 часа она таки выполнилась!
При совмещении двух списков явственно видно, что некоторые люди имеют по две строки. Выглядит так: Код (Text): Пупкин Василий телефон Пупкин Василий дата рождения это понятно. Сложностей нету. Ща придумаю как быть =)
гы... отквочу твой код, чтобы не пропал PHP: <?php $body = file_get_contents("body.xml"); $position = 0; $counter = 0; function getrow() { global $body, $position; $st = strpos($body, "<Row ", $position); $st = strpos($body, "<Row ", $position); if (($st == false) )return false; $end = strpos($body, "</Row>", $position); $a = $end + 6 - $st; $position = $end + 3; return substr($body, $st, $a); } ; $names1 = array(); $names2 = array(); $namesr = array(); $phonesr = array(); $nstylescr = array(); $nstylesdr = array(); $pstylescr = array(); $pstylesdr = array(); $phones1 = array(); $phones2 = array(); $nstylesc1 = array(); $nstylesd1 = array(); $nstylesd2 = array(); $nstylesc2 = array(); $pstylesc1 = array(); $pstylesd1 = array(); $pstylesd2 = array(); $pstylesc2 = array(); $pids1 = array(); $nids2 = array(); $pids2 = array(); $rows = array(); for ($i = 0; $i < 7109; $i++) { $rows[] = getrow(); if ($i == 1000 )echo "$i=1000"; if ($i == 2000 )echo "$i=2000"; if ($i == 3000 )echo "$i=3000"; if ($i == 4000 )echo "$i=4000"; if ($i == 5000 )echo "$i=5000"; if ($i == 6000 )echo "$i=6000"; if ($i == 7000 )echo "$i=7000"; if ($i == 7108 )echo "$i=7108"; }; unset($body); for ($i = 0; $i < sizeof($rows); $i++) { $row = $rows[$i]; $pos = 0; $st = strpos($row, "<Cell", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $nstylesc1[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = strpos($row, "<Data", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $nstylesd1[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = $pos + 1; $end = strpos($row, "<", $st); $a = $end - $st; $names1[$i] = trim(substr($row, $st, $a)); $names2[$i] = ''; $phones2[$i] = ''; $phones1[$i] = ''; $pos = $end; if (substr_count($row, 'ss:Index="3"') == 0) { if (substr_count($row, "</Cell>") > 1) { $st = strpos($row, "<Cell", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $pstylesc1[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = strpos($row, "<Data", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $pstylesd1[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = $pos + 1; $end = strpos($row, "<", $st); $a = $end - $st; $phones1[$i] = trim(substr($row, $st, $a)); $pids1[] = $i; $pos = $end; if (substr_count($row, "</Cell>") > 2) { $st = strpos($row, "<Cell", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $nstylesc2[$i] = trim(str_replace('ss:Index="3"', '', substr($row, $st, $a))); $pos = $end; $st = strpos($row, "<Data", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $nstylesd2[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = $pos + 1; $end = strpos($row, "<", $st); $a = $end - $st; $names2[$i] = trim(substr($row, $st, $a)); $nids2[] = $i; $pos = $end; if (substr_count($row, "</Cell>") > 3) { $st = strpos($row, "<Cell", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $pstylesc2[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = strpos($row, "<Data", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $pstylesd2[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = $pos + 1; $end = strpos($row, "<", $st); $a = $end - $st; $phones2[$i] = trim(substr($row, $st, $a)); $pids2 = $i; $pos = $end; }; }; }; } else { if (substr_count($row, "</Cell>") > 1) { $st = strpos($row, "<Cell", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $nstylesc2[$i] = trim(str_replace('ss:Index="3"', '', substr($row, $st, $a))); $pos = $end; $st = strpos($row, "<Data", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $nstylesd2[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = $pos + 1; $end = strpos($row, "<", $st); $a = $end - $st; $names2[$i] = trim(substr($row, $st, $a)); $nids2[] = $i; $pos = $end; if (substr_count($row, "</Cell>") > 2) { $st = strpos($row, "<Cell", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $pstylesc2[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = strpos($row, "<Data", $pos) + 5; $end = strpos($row, ">", $st); $a = $end - $st; $pstylesd2[$i] = trim(substr($row, $st, $a)); $pos = $end; $st = $pos + 1; $end = strpos($row, "<", $st); $a = $end - $st; $phones2[$i] = trim(substr($row, $st, $a)); $pos = $end; }; }; }; if ($i == 1000 )echo "$i=1000"; if ($i == 2000 )echo "$i=2000"; if ($i == 3000 )echo "$i=3000"; if ($i == 4000 )echo "$i=4000"; if ($i == 5000 )echo "$i=5000"; if ($i == 6000 )echo "$i=6000"; if ($i == 7000 )echo "$i=7000"; //if($i==800)echo "$i=7108"; }; unset($rows); for ($i = 0; $i < sizeof($names1); $i++) { $namesr[] = $names1[$i]; $phonesr[] = $phones1[$i]; $nstylescr[] = $nstylesc1[$i]; $nstylesdr[] = $nstylesd1[$i]; if (!empty($pstylesc1[$i])) { $pstylescr[] = $pstylesc1[$i]; } else { $pstylescr[] = ''; }; if (!empty($pstylesd1[$i])) { $pstylesdr[] = $pstylesd1[$i]; } else { $pstylesdr[] = ''; }; if ($i == 1000 )echo "\$i=1000"; if ($i == 2000 )echo "\$i=2000"; if ($i == 3000 )echo "\$i=3000"; if ($i == 4000 )echo "\$i=4000"; if ($i == 5000 )echo "\$i=5000"; if ($i == 6000 )echo "\$i=6000"; if ($i == 7000 )echo "\$i=7000"; if ($i == 7108 )echo "\$i=7108"; }; for ($i = 0; $i < sizeof($nids2); $i++) { $namesr[] = $names2[$nids2[$i]]; $phone = $phones2[$nids2[$i]]; $nstylescr[] = $nstylesc2[$nids2[$i]]; $nstylesdr[] = $nstylesd2[$nids2[$i]]; $phonesr[] = $phone; if (!empty($phone)) { $pstylescr[] = $pstylesc2[$nids2[$i]]; $pstylesdr[] = $pstylesd2[$nids2[$i]]; } else { $pstylescr[] = ''; $pstylesdr[] = ''; }; if ($i == 1000 )echo "\$i=1000"; if ($i == 2000 )echo "\$i=2000"; if ($i == 3000 )echo "\$i=3000"; if ($i == 4000 )echo "\$i=4000"; if ($i == 5000 )echo "\$i=5000"; if ($i == 6000 )echo "\$i=6000"; if ($i == 7000 )echo "\$i=7000"; if ($i == 8000 )echo "\$i=8000"; if ($i == 9000 )echo "\$i=9000"; if ($i == 10000 )echo "\$i=10000"; if ($i == 11000 )echo "\$i=11000"; if ($i == 12000 )echo "\$i=12000"; if ($i == 13000 )echo "\$i=13000"; if ($i == 14000 )echo "\$i=14000"; if ($i == 15000 )echo "\$i=15000"; if ($i == 16000 )echo "\$i=16000"; }; $counter = sizeof($namesr) - 1; echo("sizeof=$counter"); for ($i = 0; $i < sizeof($namesr) - 1; $i++) { for ($j = $i + 1; $j < sizeof($namesr); $j++) { if (substr_count(strtolower($namesr[$i]), strtolower($namesr[$j])) > 0) { if (!empty($phonesr[$j]) )$phonesr[$i] = $phonesr[$j]; $counter--; }else { }; }; if ($i == 1000 )echo "\$i=1000"; if ($i == 2000 )echo "\$i=2000"; if ($i == 3000 )echo "\$i=3000"; if ($i == 4000 )echo "\$i=4000"; if ($i == 5000 )echo "\$i=5000"; if ($i == 6000 )echo "\$i=6000"; if ($i == 7000 )echo "\$i=7000"; if ($i == 8000 )echo "\$i=8000"; if ($i == 9000 )echo "\$i=9000"; if ($i == 10000 )echo "\$i=10000"; if ($i == 11000 )echo "\$i=11000"; if ($i == 12000 )echo "\$i=12000"; if ($i == 13000 )echo "\$i=13000"; if ($i == 14000 )echo "\$i=14000"; if ($i == 15000 )echo "\$i=15000"; if ($i == 16000 )echo "\$i=16000"; }; echo("counter=$counter"); unset($names1); unset($phones1); unset($names2); unset($phones2); for ($i = 0; $i < sizeof($namesr) - 1; $i++) { for ($j = $i + 1; $j < sizeof($namesr); $j++) { if ($namesr[$j] < $namesr[$i]) { $buf = $namesr[$i]; $namesr[$i] = $namesr[$j]; $namesr[$j] = $buf; $buf = $phonesr[$i]; $phonesr[$i] = $phonesr[$j]; $phoners[$j] = $buf; $buf = $nstylescr[$i]; $nstylescr[$i] = $nstylescr[$j]; $nstylescr[$j] = $buf; $buf = $nstylesdr[$i]; $nstylesdr[$i] = $nstylesdr[$j]; $nstylesdr[$j] = $buf; $buf = $pstylescr[$i]; $pstylescr[$i] = $pstylescr[$j]; $pstylescr[$j] = $buf; $buf = $pstylesdr[$i]; $pstylesdr[$i] = $pstylesdr[$j]; $pstylesdr[$j] = $buf; }; }; if ($i == 1000 )echo "\$i=1000"; if ($i == 2000 )echo "\$i=2000"; if ($i == 3000 )echo "\$i=3000"; if ($i == 4000 )echo "\$i=4000"; if ($i == 5000 )echo "\$i=5000"; if ($i == 6000 )echo "\$i=6000"; if ($i == 7000 )echo "\$i=7000"; if ($i == 8000 )echo "\$i=8000"; if ($i == 9000 )echo "\$i=9000"; if ($i == 10000 )echo "\$i=10000"; if ($i == 11000 )echo "\$i=11000"; if ($i == 12000 )echo "\$i=12000"; if ($i == 13000 )echo "\$i=13000"; if ($i == 14000 )echo "\$i=14000"; if ($i == 15000 )echo "\$i=15000"; if ($i == 16000 )echo "\$i=16000"; }; $final = ''; for ($i = 0; $i <= $counter; $i++) { $final.='<Row ss:AutoFitHeight="0" ss:Height="12.1875">' . "\r\n"; $final.="<Cell $nstylescr[$i] ><Data $nstylesdr[$i] >$namesr[$i]</Data></Cell>" . "\r\n"; if (!empty($phonesr[$i])) { $final.="<Cell $pstylescr[$i] ><Data $pstylesdr[$i] >$phonesr[$i]</Data></Cell>" . "\r\n"; }; $final.="</Row>"; if ($i == 1000 )echo "\$i=1000"; if ($i == 2000 )echo "\$i=2000"; if ($i == 3000 )echo "\$i=3000"; if ($i == 4000 )echo "\$i=4000"; if ($i == 5000 )echo "\$i=5000"; if ($i == 6000 )echo "\$i=6000"; if ($i == 7000 )echo "\$i=7000"; if ($i == 8000 )echo "\$i=8000"; if ($i == 9000 )echo "\$i=9000"; if ($i == 10000 )echo "\$i=10000"; if ($i == 11000 )echo "\$i=11000"; if ($i == 12000 )echo "\$i=12000"; if ($i == 13000 )echo "\$i=13000"; if ($i == 14000 )echo "\$i=14000"; if ($i == 15000 )echo "\$i=15000"; if ($i == 16000 )echo "\$i=16000"; }; $final.="</Table>"; $prefix = file_get_contents("prefix.xml"); $posix = file_get_contents("posix.xml"); $final = $prefix . $final . $posix; file_put_contents("final.xml", $final); echo(substr_count($final, "<Row ")); ?>
goshalve ну вардамп сделай, да посмотри. там на каждого человека имя, если есть - дата, если есть - телефон. вот ты в цикле форыч по ним проходишь, и смски у кого есть телефон послыаешь, а у кого еще и дата - тем даже с ДР подзравления!
MiksIr Да ладно там такая убогая база что рассылку чтобы провести нужно как минимум её воостановить-а это ваще нереально . igordata по ходу содержится переменная $val а она является массивом,как получить имя и телефон 11 по счёту человека?
goshalve это человек,который решил делать сайты забугорные. ноу коментс. ты вардамп сделал блин? нука быстро мозги в кучку собрал!
igordata Ну чего ты так обо мне по моему очень даже красиво получилось!На мыло вышлю-увидишь,так мне еще неделю насморк лечить потому что течет
Программа получилась такая в результате (твой код и мой вывод) PHP: <?php $a = file("base.txt"); $people = array(); foreach ($a as $val) { $date = false; //или "" $val = explode("\t", $val); if (preg_match("/\d{2}\.\d{2}\.\d{4}/", substr($val[0], -10))) { //тут есть дата рождения $date = substr($val[0], -10); $val[0] = substr($val[0], 0, strlen($val[0]) - 11); } $val[0] = trim($val[0]); if ($date) { $people[$val[0]]['date'] = $date; } if (isset($val[1])) { $val[1] = trim($val[1]); if ($val[1]) { $people[$val[0]]['phones'][] = $val[1]; //у некоторых людей по несколько разных телефонов. } } } foreach ($people as &$val) { if (isset($val['phones'])) { $val['phones'] = array_unique($val['phones']); } }; $final=''; foreach ($people as $val=>$data) { $phone=''; if(isset($data['phones']))$phone=$data['phones']; if(!empty($phone))$phone=$phone[0]; $final.='<Row>'."\r\n"; $final.="<Cell><Data>$val</Data></Cell>"."\r\n"; $final.="<Cell><Data>$phone</Data></Cell>"."\r\n"; $final.="</Row>"; }; $final.="</Table>"; $prefix=file_get_contents("prefix.xml"); $posix=file_get_contents("posix.xml"); file_put_contents("fin.xml",$prefix.$final.$posix); exit; ?> Опять ошибку он нашел,пишет таблица неправильно составлена
спакуха. вот такого: $phone=''; if(isset($data['phones']))$phone=$data['phones']; if(!empty($phone))$phone=$phone[0]; я не пишу. мой до 30 строки =) А глаза - точно Лешкины! (с) бабки у подъезда (шутка) вобще можно было уложиться и по-меньше, но телефоны бывает, что дублятся. =) 25 строк против 434. goshalve Опять ошибку он нашел,пишет таблица неправильно составлена на вид все правильно. возможно стоит пробежаться глазами по таблице, она хоть и большая, но должна получиться однообразной и любой косяк будет заметен. предлагаю заменить этот код PHP: <? $phone=''; if(isset($data['phones']))$phone=$data['phones']; if(!empty($phone))$phone=$phone[0]; $final.='<Row>'."\r\n"; $final.="<Cell><Data>$val</Data></Cell>"."\r\n"; $final.="<Cell><Data>$phone</Data></Cell>"."\r\n"; $final.="</Row>"; на че по-проще. я проверять не буд, думаю прокатит и так PHP: <? $final.='<Row>'."\r\n"; $final.="<Cell><Data>$val</Data></Cell>"."\r\n"; $final.="<Cell><Data>" . (isset($data['phones'][0]) ? $data['phones'][0] : '') . "</Data></Cell>"."\r\n"; $final.="</Row>"; должно получиться то же самое, но минус половина строк а нафига тебе эта xml-ка? БД может?