|
|
|
| надо преобразовать 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: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"
|
| |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: Trianon
(22.10.2008 в 13:02)
| | A TAK?
$posled = substr($row['DOCSID'],-4);
получаю последние 4. проверяла. пойду еще проверю. | |
|
|
|
|
|
|
|
для: elenaki
(22.10.2008 в 13:07)
| | Так -- да, получите последние 4.
P.S. Сижу и удивляюсь, а почему Trianon посоветовал разделить именно на 10000, а для последнего -- остаток от деления на 10000. Тут нигде вроде не было объяснено каким образом 40001 преобразуется в замечательные 0004, 0004, 0001. | |
|
|
|
|
|
|
|
для: BinLaden
(22.10.2008 в 16:14)
| | в самом первом посте объяснено - взять последние 4 символа строки. к оставшимся
первым прибавить впереди нулей, чтоб их стало 4, потом составить путь к файлу по
шаблону. | |
|
|
|
|
|
|
|
для: elenaki
(22.10.2008 в 18:49)
| | Понятно. И Вы сделали так же? | |
|
|
|
|
|
|
|
для: elenaki
(22.10.2008 в 18:49)
| | А почему 40001 представляется как 0004_0001 (то есть реверс строки 4000), а 2490182 - тут надо 249 вытащить..., надо понимать как 0249_0182? Почему не 0942 ? | |
|
|
|
|
|
|
|
для: sim5
(22.10.2008 в 19:35)
| | 2490182 (это id картинки в базе)
1. берем последние 4 символа это 0182
2. берем оставшие в строке первые символы и добавляем нули впереди, чтоб символов
стало 4 : "0" + "249" = "0249"
3. собираем строку: 0249/0249_0182.jpg (это путь к картинке на сервере)
в других категориях было не так запутано. там я быстро сделала. но и это тоже уже решено. | |
|
|
|
|
|
|
|
для: elenaki
(22.10.2008 в 19:43)
| | 1... первых четыре... 40001 - это будет 4000
2... добавляем нули - 0004000 ???
Путаница какая-то ) | |
|
|
|
|
|
|
|
для: sim5
(22.10.2008 в 19:52)
| | никакой путаницы (хехе, знали бы вы, ЧТО значит по-гречески "путаница")
не первых, а последних 4!
а "первые" - это те, которые остались после отнятия "последних" 4-x (при 40001 - 4, а при 2490182 - это 249)
дал ладно, не заморачивайтесь. это мне монахи подкинули работенку. они не математики... | |
|
|
|
|
|
|
|
для: elenaki
(22.10.2008 в 19:59)
| | Понял, это не монахи, это я минусовать забыл :) | |
|
|
|