2013-09-21 4 views
-1
$source = "oasdfyoasdfyoasdfyoasdfy"; 
$startIndexes = {0, 6, 12, 18}; #(o characters) 
$endIndexes = {5, 11, 17, 23}; #(y characters) 

Это всего лишь пример фактических структур.Как разбить строку на отдельные подстроки

Как я могу разбить $ source на отдельные строки, используя переменные substr() и array [$ x]? $ startIndexes и $ endIndexes гарантированно будут иметь одинаковый размер.

Это, кажется, не работает ...

for($x = 0; $x < sizeOf($startIndexes); $x++) 
{ 
    echo substr($source, $startIndexes[$x], $endIndexes[$x] - $startIndexes[$x]) . '</br></br>'; 
} 

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

+1

У вас есть сообщения об ошибках? Как ошибка синтаксического анализа для того, как вы назначаете переменные? – Barmar

+2

Похоже, что вам не хватает +1 от третьего параметра substr (длина). Предполагая, что вы хотите разбить последовательные строки «oasdfy». Третий аргумент для substr - это длина, поэтому ваша стартовая позиция правильная, но длина - это индекс конца минус начальный индекс плюс 1. Я должен признаться, что я не программист на PHP, так как другие комментировали, могут быть проблемы в ваш PHP-код тоже –

+0

Я вижу, что недавно у вас было немного крещения огня - умеренный вопрос удален, и я думаю, что вы удалили один из своих собственных добровольно? Не беспокойтесь о удаленном вопросе: вернитесь на лошадь и задайте больше вопросов! Для новых пользователей я рекомендую, чтобы вопросы были тщательно исследованы до того, как они спросили; вопросы формы «что не так с этим кодом» намного лучше, чем «как это сделать». Наконец, если пользователи с высоким уровнем репутаций дают вам советы, это обычно подразумевается любезно - даже если это означает, что некоторые вопросы не так по теме, как хотелось бы. Удачи! – halfer

ответ

0

Я считаю, что вы не можете инициализировать массив таким образом. Он должен быть

$startIndexes = array(0, 6, 12, 18); 
$endIndexes = array(5, 11, 17, 23); 
1

неправильно инициализации массива, и отсутствует Misterious 1 см вики http://en.wikipedia.org/wiki/Off-by-one_error

$source = "oasdfyoasdfyoasdfyoasdfy"; 

$startIndexes = array(0, 6, 12, 18); #(o characters) 
$endIndexes = array(5, 11, 17, 23); #(y characters) 

for($x = 0; $x < count($startIndexes); $x++) { 

    echo substr($source, $startIndexes[$x], $endIndexes[$x] - $startIndexes[$x] + 1) . '</br></br>'; 

} 
+0

@Derek также прокомментировал «одну» проблему, которую я не видел при публикации ответа. – Kyslik

0

Здесь идет несколько иной подход, чтобы сделать код меньше, безопаснее, легче читать и быстрее:

// Your string 
$source = "oasdfyoasdfyoasdfyoasdfy"; 
// Instead of two arrays, you can have only one, using start positions 
// as the keys, and end positions as values 
$positions = array(0=>5, 6=>11, 12=>17, 18=>23); 
// Do a foreach loop, it's more efficient. 
foreach($positions as $start => $end) 
{ 
    echo substr($source, $start, $end - $start + 1) . '</br></br>'; 
} 
1

Во-первых, всегда дайте фактический образец кода, если это возможно. В противном случае нам остается «Я написал что-то, что не сработало». На что мы можем ответить только «Напишите что-то, что делает».

Синтаксис массива должен быть $startIndex=array(0,6,12,18);.

Во-вторых, вам не нужен второй массив.

Посмотрите на this ideone sample.

<?php 
    function suffix($number){ 
     $suffix = array('th','st','nd','rd','th','th','th','th','th','th'); 
     if (($number %100) >= 11 && ($number%100) <= 13) 
      $abbreviation = $number. 'th'; 
     else 
      $abbreviation = $number. $suffix[$number % 10]; 
     return $abbreviation; 
    } 
$source = "oasdfyoasdfyoasdfyoasdfy"; 
$startIndexes =array(0, 6, 12, 18); 

for ($i=0; $i < count($startIndexes); $i++){ 
    $index= $startIndexes[$i]; 
    $len = ($i< count($startIndexes)-1 ? $startIndexes[$i +1]  : 
              strlen($source)) - ($index); 
    echo sprintf("The %s substring is:[%s]\n", 
               suffix($i+1), 
               substr($source, $index, $len)); 
} 

?> 
Смежные вопросы