koalvi.blogspot.com - другой мой блог "сойдет на троечку"
Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

воскресенье, 13 марта 2016 г.

получить массив из файла в php

В php понадобилось "загнать" двумерный массив (если точнее массив массивов) из текстового файла, как разделитель между столбиками была выбрана (тильда)
==================== php

function out($filename)
  {if (file_exists('directory/'.$filename)==true) 
      {$lines = file('directory/'.$filename); 
       $i=0; 
        foreach ($lines as $value)
        $array0[$i++]=explode("~",$value);} 
     else $array0[0]=explode("~","1~1"); 
return $array0;} 

поиск в массиве по строковому значению php

======= php ==== avk013
поиск в массиве по строковому значению и возврат номера (индекса)
out_l(значение_для поиска,массив,столбец_в_котором_ищем,столбец_с_индексом);
+++++++++++++++++++++++++++++
function out_l($str,$array,$nom1,$nom2){
for($i=0;$i<count($array);$i++)
{if ($array[$i][$nom1]==$str) {$out=$array[$i][$nom2];break;}
}return $out;}

суббота, 14 ноября 2015 г.

Велосипед: массив в таблицу на php

======== php : 1х или 2х прямоугольный массив в таблицу
function arr2tab($data)
{$tab='<table border="1" cellpadding="1" cellspacing="0"><tr>';
for($i=0;$i<count($data);$i++)
if(count($data[0])>1){for($j=0;$j<count($data[0]);$j++)
 $tab.='<td>'.$data[$i][$j].'</td>'; $tab.='</tr><tr>';} else  $tab.='<td>'.$data[$i].'</td></tr><tr>';
 $tab.='</tr></table>';
return $tab;}
========

Сортировка PHP и национальные символы (українська І, Є) в 2x массиве.

******* код, реально работающий в проекте
<?
function sort_uk( $a, $b ){
$a = mb_strtoupper ( $a, 'UTF-8' );
$b = mb_strtoupper ( $b, 'UTF-8' );
$alphabet = array(
'А' => 1, 'Б' => 2, 'В' => 3, 'Г' => 4, 'Д' => 5, 'Е' => 6, 'Є' => 7, 'Ж' => 8, 'З' => 9, 'И' => 10, 'І' => 11,
'Ї' => 12, 'Й' => 13, 'К' => 14, 'Л' => 15, 'М' => 16, 'Н' => 17, 'О' => 18, 'П' => 19, 'Р' => 20, 'С' => 21, 'Т' => 22,
'У' => 23, 'Ф' => 24, 'Х' => 25, 'Ц' => 26, 'Ч' => 27, 'Ш' => 28, 'Щ' => 29, 'Ь' => 30, 'Ю' => 31, 'Я' => 32);
$lengthA = mb_strlen ( $a, 'UTF-8' );
$lengthB = mb_strlen ( $b, 'UTF-8' );
for( $i = 0; $i < ( $lengthA > $lengthB? $lengthB: $lengthA ); $i++ ){
   if ( $alphabet[ mb_substr( $a, $i, 1, 'UTF-8' ) ] < $alphabet[ mb_substr( $b, $i, 1, 'UTF-8' ) ]){           $status = -1;          break;       }
    elseif ( $alphabet[ mb_substr( $a, $i, 1, 'UTF-8' ) ] > $alphabet[ mb_substr( $b, $i, 1, 'UTF-8' ) ] ){ $status = 1; break; }
       else{ $status = 0; } }
   return $status;}
function sort_array2x($data,$st)
{
//echo 'oops';
for($i=0;$i<count($data);$i++) {$a=$data[$i][$st];$data[$i][$st]=$data[$i][0];$data[$i][0]=$a;}
$ii=0;for($i=0;$i<count($data);$i++)
       for($j=0;$j<count($data[0]);$j++)
         if($j<count($data[0])-1) $ndata[$i].=$data[$i][$j].'|';  else $ndata[$i].=$data[$i][$j];
//print_r( $ndata);
usort($ndata, 'sort_uk');
 
//print_r($ndata);
for($i=0;$i<count($ndata);$i++) $data[$i]=explode("|",$ndata[$i]);
//echo "<BR>";print_r($data);
for($i=0;$i<count($ndata);$i++) {$a=$data[$i][$st];$data[$i][$st]=$data[$i][0];$data[$i][0]=$a;}
return $data;}
?>
*******
"Кусок кода" (состоит из класса и функции) для сортировки таблицы с кириллицей и нац.укр.символами, решал проблему с правильной сортировкой украинских фамилий без участия MySql (он как раз нормально делает order by fam).
пример использования:
$data=sort_array2x($data,1) где 1- номер второго столбца.
Для сортировки обычного списка (одномерного) можно использовать
usort($data, 'utf_8_UA::cmp');
========= php ==
class utf_8_UA
{static $order = '0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzАаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя';
 static $char2order;
 static function cmp($a, $b) {
    if ($a == $b)  return 0;  
    if (empty(self::$char2order))
    { $order = 1;$len = mb_strlen(self::$order);
      for ($order=0; $order<$len; ++$order) self::$char2order[mb_substr(self::$order, $order, 1)] = $order;}
     $len_a = mb_strlen($a);$len_b = mb_strlen($b);$max=min($len_a, $len_b);
    for($i=0; $i<$max; ++$i)
    { $char_a= mb_substr($a, $i, 1);$char_b= mb_substr($b, $i, 1);
      if ($char_a == $char_b) continue;
      $order_a = (isset(self::$char2order[$char_a])) ? self::$char2order[$char_a] : 9999;
      $order_b = (isset(self::$char2order[$char_b])) ? self::$char2order[$char_b] : 9999;
       return ($order_a < $order_b) ? -1 : 1;}return ($len_a < $len_b) ? -1 : 1;  }}
function sort_array2x($data,$st)
{for($i=0;$i<count($data);$i++) {$a=$data[$i][$st];$data[$i][$st]=$data[$i][0];$data[$i][0]=$a;}
$ii=0;for($i=0;$i<count($data);$i++)
       for($j=0;$j<count($data[0]);$j++)
         if($j<count($data[0])-1) $ndata[$i].=$data[$i][$j].'|';  else $ndata[$i].=$data[$i][$j];
usort($ndata, 'utf_8_UA::cmp');
for($i=0;$i<count($ndata);$i++) $data[$i]=explode("|",$ndata[$i]);
for($i=0;$i<count($ndata);$i++) {$a=$data[$i][$st];$data[$i][$st]=$data[$i][0];$data[$i][0]=$a;}
return $data;}
=========== php
PS. Класс заимствовал (спасибо w-dot-rosenbach-at-netskill-de за мотивы), функция моя не претендует на идеал, но для меня логично работает, легкие аналоги на глаза не попадались.
(C) Коваленко Александр


а вот еще вариант Sergic - лучший ответ от  mysqlru.com
=== php
function sort_uk( $a, $b ){
$a = mb_strtoupper ( $a, 'UTF-8' );
$b = mb_strtoupper ( $b, 'UTF-8' );
$alphabet = array(
'А' => 1, 'Б' => 2, 'В' => 3, 'Г' => 4, 'Д' => 5, 'Е' => 6, 'Є' => 7, 'Ж' => 8, 'З' => 9, 'И' => 10, 'І' => 11,
'Ї' => 12, 'Й' => 13, 'К' => 14, 'Л' => 15, 'М' => 16, 'Н' => 17, 'О' => 18, 'П' => 19, 'Р' => 20, 'С' => 21, 'Т' => 22,
'У' => 23, 'Ф' => 24, 'Х' => 25, 'Ц' => 26, 'Ч' => 27, 'Ш' => 28, 'Щ' => 29, 'Ь' => 30, 'Ю' => 31, 'Я' => 32);
$lengthA = mb_strlen ( $a, 'UTF-8' );
$lengthB = mb_strlen ( $b, 'UTF-8' );
for( $i = 0; $i < ( $lengthA > $lengthB? $lengthB: $lengthA ); $i++ ){
   if ( $alphabet[ mb_substr( $a, $i, 1, 'UTF-8' ) ] < $alphabet[ mb_substr( $b, $i, 1, 'UTF-8' ) ]){           $status = -1;          break;       }
    elseif ( $alphabet[ mb_substr( $a, $i, 1, 'UTF-8' ) ] > $alphabet[ mb_substr( $b, $i, 1, 'UTF-8' ) ] ){ $status = 1; break; }
       else{ $status = 0; } }
   return $status;}
 
uasort($arr, 'sort_uk');
=== 
а вот еще хороший ресурс про двумерные массивы
http://www.the-art-of-web.com/php/sortarray/

четверг, 5 ноября 2015 г.

php брать данные о предпочитаемом языке из браузера

теоретически можно показывать страницу ориентируясь на данные клиента, вот и попытка взять "переводы", ссылаясь на язык из массива идентификатора от браузера
=========== php (Спасибо Rage Noir )
function get_lang(){ // получаем первый язык от браузера
  if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    foreach(explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $value) {
      if(strpos($value, ';') !== false) list($value, ) = split(';', $value);
      if(strpos($value, '-') !== false) list($value, ) = split('-', $value);
      $langs[] = $value;}} else $langs[0]="en";
return $langs[0];}
=====================
естественно задача была если посетитель "левый" и его перевод незнаком, подсунуть английский...выполнялся выбор файлов по префиксу языка и выглядело это так:
....if (file_exists('locale/'.$_COOKIE['lang'].'.l')==false) $local='en';....
ну и соответственно приветствие с использованием куки, если уже определились...
if (empty($_COOKIE['lang'])) 
{$local=get_lang(); //считаем его языком по умолчанию и записываем в печеньку или сессию
SetCookie("lang",$local);}
================================= php