Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: строковые заморочки
 
 автор: elenaki   (22.10.2008 в 12:15)   письмо автору
 
 

надо преобразовать 40001 в 0004/0004_0001.jpg (подобных строк много, но отсчет всегда с
конца). разбиваю на 3 подзадачи:

1. из строки "40001" выделяю 4 последних символа. это получилось. $posled = substr($row['DOCSID'],4);
2. потом найти оставшуюся после отнятия 4-х последних символов строку, т.е. с нулевого
до 5-го с конца. это не получается.
3. потом собрать новую строку со слешами и подчеркиваниями и приклеить ".jpg". это просто.
if ($perv < 10) $perv = "000".$perv;
 else if ($perv > 10 && $perv < 100) $perv = "00".$perv;
  else $perv = "0".$perv;
  
$file_name = $perv."/".$perv."_".$posled.".jpg";


помогите с п.2 - найти $perv, т.е. символы с начала строки до 5-го с конца (вместо 40001 м.б.
2490182 - тут надо 249 вытащить...)

вроде, где-то надо ставить минус, чтобы считать с конца строки. не могу найти в справочнике.

  Ответить  
 
 автор: elenaki   (22.10.2008 в 12:36)   письмо автору
 
   для: elenaki   (22.10.2008 в 12:15)
 

получилось! изменила немного. почему в софттаймовском справочнике PHP нет ни слова о
минусе в "Строковых функциях"? я нашла в другом месте это:


substr
Возвращает участок строки с определенной длиной.

Синтаксис :
string substr(string str, int start [,int length])

Возвращает участок строки str, начиная с позиции start и длиной length. Если length не задана, то подразумевается подстрока от start до конца строки str. Если start больше, чем длина строки, или же значение length равно нулю, то возвращается пустая подстрока.

Однако эта функция может делать и еще довольно полезные вещи. К примеру, если мы передадим в start отрицательное число, то будет считаться, что это число является индексом подстроки, но только отсчитываемым от конца str (например, -1 означает "начинается с последнего символа строки").
Параметр length, если он задан, тоже может быть отрицательным. В этом случае последним символом возвращаемой подстроки будет символ из str с индексом length, определяемым от конца строки. 
$str = substr("abcdef", 1);     // возвратит "bcdef"
$str = substr("abcdef", 1, 3);  // возвратит "bcd"
$str = substr("abcdef", -1);    // возвратит "f"
$str = substr("abcdef", -2);    // возвратит "ef"
$str = substr("abcdef", -3, 1); // возвратит "d"
$str = substr("abcdef", 1, -1); // возвратит "bcde"


  Ответить  
 
 автор: Trianon   (22.10.2008 в 13:02)   письмо автору
 
   для: elenaki   (22.10.2008 в 12:15)
 

>1. из строки "40001" выделяю 4 последних символа. это получилось. $posled = substr($row['DOCSID'],4);

это неверно. Не напутайте. Вы получили все символы после четвертого и далее.

Я бы написал
$hi = intval($num/10000); $lo = $num % 10000;
$file_name = sprintf("%04d/%04d_%04d.jpg", $hi, $hi, $lo);

  Ответить  
 
 автор: elenaki   (22.10.2008 в 13:07)   письмо автору
 
   для: Trianon   (22.10.2008 в 13:02)
 

A TAK?
$posled = substr($row['DOCSID'],-4);

получаю последние 4. проверяла. пойду еще проверю.

  Ответить  
 
 автор: BinLaden   (22.10.2008 в 16:14)   письмо автору
 
   для: elenaki   (22.10.2008 в 13:07)
 

Так -- да, получите последние 4.

P.S. Сижу и удивляюсь, а почему Trianon посоветовал разделить именно на 10000, а для последнего -- остаток от деления на 10000. Тут нигде вроде не было объяснено каким образом 40001 преобразуется в замечательные 0004, 0004, 0001.

  Ответить  
 
 автор: elenaki   (22.10.2008 в 18:49)   письмо автору
 
   для: BinLaden   (22.10.2008 в 16:14)
 

в самом первом посте объяснено - взять последние 4 символа строки. к оставшимся
первым прибавить впереди нулей, чтоб их стало 4, потом составить путь к файлу по
шаблону.

  Ответить  
 
 автор: BinLaden   (22.10.2008 в 19:07)   письмо автору
 
   для: elenaki   (22.10.2008 в 18:49)
 

Понятно. И Вы сделали так же?

  Ответить  
 
 автор: sim5   (22.10.2008 в 19:35)   письмо автору
 
   для: elenaki   (22.10.2008 в 18:49)
 

А почему 40001 представляется как 0004_0001 (то есть реверс строки 4000), а 2490182 - тут надо 249 вытащить..., надо понимать как 0249_0182? Почему не 0942 ?

  Ответить  
 
 автор: elenaki   (22.10.2008 в 19:43)   письмо автору
 
   для: sim5   (22.10.2008 в 19:35)
 

2490182 (это id картинки в базе)

1. берем последние 4 символа это 0182
2. берем оставшие в строке первые символы и добавляем нули впереди, чтоб символов
стало 4 : "0" + "249" = "0249"
3. собираем строку: 0249/0249_0182.jpg (это путь к картинке на сервере)

в других категориях было не так запутано. там я быстро сделала. но и это тоже уже решено.

  Ответить  
 
 автор: sim5   (22.10.2008 в 19:52)   письмо автору
 
   для: elenaki   (22.10.2008 в 19:43)
 

1... первых четыре... 40001 - это будет 4000
2... добавляем нули - 0004000 ???

Путаница какая-то )

  Ответить  
 
 автор: elenaki   (22.10.2008 в 19:59)   письмо автору
 
   для: sim5   (22.10.2008 в 19:52)
 

никакой путаницы (хехе, знали бы вы, ЧТО значит по-гречески "путаница")

не первых, а последних 4!
а "первые" - это те, которые остались после отнятия "последних" 4-x (при 40001 - 4, а при 2490182 - это 249)
дал ладно, не заморачивайтесь. это мне монахи подкинули работенку. они не математики...

  Ответить  
 
 автор: sim5   (22.10.2008 в 20:05)   письмо автору
 
   для: elenaki   (22.10.2008 в 19:59)
 

Понял, это не монахи, это я минусовать забыл :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования