Простая, но запутанная манипуляция со строками Ruby - PullRequest
0 голосов
/ 06 февраля 2010

Я пытаюсь преобразовать немного Ruby в PHP, и до сих пор добился успеха, за исключением одной строки:

string = string[16,string.length-16]

Я пробовал эти две вещи в PHP:

$string = substr($string, 16, strlen($string) - 16);
// and
$string = substr($string, 16, strlen($string) - 32);

Но проблема в том, что я понятия не имею, что делает синтаксис string[#,#]. Я видел string[#..#] раньше и string[#], но никогда string[#,#].

Ответы [ 4 ]

3 голосов
/ 06 февраля 2010

Мне кажется, что $string = substr($string, 16, strlen($string) - 16); должно работать ... другой вывод?

Да, и еще о строке в ruby: http://ruby -doc.org / ядро ​​/ классов / String.html # M000771

3 голосов
/ 06 февраля 2010

string[x,y] - это подстрока, которая начинается с индекса x и имеет длину y символов (или байтов в 1.8) (в отличие от string[x..y], которая начинается с индекса x и заканчивается на индексе y).

2 голосов
/ 06 февраля 2010

Если вы посмотрите на документы по Ruby, вы узнаете все виды странных вещей. Но этот синтаксис является просто подстрокой и смещением, поэтому, если вы просто запустите irb и немного потрудитесь, вы получите

>> "123456789"[3,2]
=> "45"

чтобы вы могли видеть, что происходит. В любом случае, документы здесь

str.index(substring [, offset]) => fixnum or nil
str.index(fixnum [, offset]) => fixnum or nil
str.index(regexp [, offset]) => fixnum or nil
Returns the index of the first occurrence of the given substring, character (fixnum), or pattern (regexp) in str. Returns nil if not found. If the second parameter is present, it specifies the position in the string to begin the search.

   "hello".index('e')             #=> 1
   "hello".index('lo')            #=> 3
   "hello".index('a')             #=> nil
   "hello".index(101)             #=> 1
   "hello".index(/[aeiou]/, -3)   #=> 4
1 голос
/ 06 февраля 2010

Судя по ответам и вашим комментариям, я чувствую, что ваша ошибка кроется в другом месте. Возможно, $ строка пуста. Проверьте свои предположения, распечатав все «очевидные» вещи. Строка, результат strlen () и т. Д. Кроме того, ошибки в предыдущей строке (например, неопределенный if ()) могут дать неожиданные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...