2016-02-18 2 views
1
$string = "The complete archive of The New York Times can now be searched from NYTimes.com " //the actual input is unknown, it would be read from textarea 

$size = the longest word length from the string 

Я назначил и инициализирован массив в цикл, например array1, array2 .... arrayN, вот как я сделалPHP Еогеасп() цикл

for ($i = 1; $i <= $size; $i++) { 
    ${"array" . $i} = array(); 
} 

поэтому $ строка будет разделена в длине слова

$array1 = [""]; 
$array2 = ["of", "be", ...] 
$array3 = ["the", "can", "now", ...] and so on 

Итак, мой вопрос заключается в том, чтобы назначить в простой цикл или цикл по каждому элементу значение $ струнной до $ массив1 $ array2, $ array3 ....., так как вводимый текст или размер самого длинного слова неизвестен

+0

Я не совсем понимаю, что вы просите, но вы, похоже, не понимаете, как работают массивы. Поскольку вам нужен массив, в котором каждый элемент является текстом, просто выполните: $ array [0] = "";, $ array [1] = "of, be ..."; и т. д. (в вашем примере вы определили множество массивов, но просто использовали их как строки!) –

+0

Вы сдались или что? – AbraCadaver

ответ

3

Я бы, вероятно, начать с $words = explode(' ', $string) затем отсортировать строки по длине слов

usort($words, function($word1, $word2) { 
    if (strlen($word1) == strlen($word2)) { 
     return 0; 
    } 
    return (strlen($word1) < strlen($word2)) ? -1 : 1; 
}); 

$longestWordSize = strlen(last($words)); 

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

$sortedWords = array(
    1 => array('a', 'I'), 
    2 => array('to', 'be', 'or', 'is'), 
    3 => array('not', 'the'), 
); 

обернув над словами, вам не нужно знать максимальную длину слова.

Окончательное решение так просто, как

foreach ($words as $word) { 
    $wordLength = strlen($word); 
    $sortedWords[ $wordLength ][] = $word; 
} 
+0

Окончательное решение выглядит странно знакомым. – AbraCadaver

0

Вы могли бы использовать что-то вроде этого:

$words = explode(" ", $string); 
foreach ($words as $w) { 
    array_push(${"array" . strlen($w)}, $w); 
} 

Это расщепляется $string в массив $words, а затем оценивает каждое слово длины и выталкивает это слово в соответствующий массив.

0
you can use explode(). 

$string = "The complete archive of The New York Times can now be searched   from NYTimes.com " ; 

$arr=explode(" ",$string); 
$count=count($arr); 

$big=0; 
for ($i = 0; $i < $count; $i++) { 
    $p=strlen($arr[$i]); 
if($big<$p){ $big_val=$arr[$i]; $big=$p;} 

    } 
echo $big_val; 
0

Просто используйте длину слова в качестве индекса и добавьте [] каждое слово:

foreach(explode(' ', $string) as $word) { 
    $array[strlen($word)][] = $word; 
} 

Для удаления дубликатов $array = array_map('array_unique', $array);.

Урожайность:

Array 
(
    [3] => Array 
     (
      [0] => The 
      [2] => New 
      [3] => can 
      [4] => now 
     ) 

    [8] => Array 
     (
      [0] => complete 
      [1] => searched 
     ) 

    [7] => Array 
     (
      [0] => archive 
     ) 

    [2] => Array 
     (
      [0] => of 
      [1] => be 
     ) 

    [4] => Array 
     (
      [0] => York 
     ) 

    [5] => Array 
     (
      [0] => Times 
     ) 
) 

Если вы хотите повторно индексировать основной массив использовать array_values() и переиндексацию Подмассивы использовать array_map() с array_values().

+0

получение неопределенной переменной: array1, когда я пытаюсь напечатать $ array1, $ array2 .... и т. Д. – Wow

+0

Это не так, как работают массивы. Попробуйте что-то вроде: 'foreach ($ array as $ len => $ list) {echo" $ len: ". implode (',', $ list). "
\ n"; } ' – AbraCadaver

+0

Если вам нужны слова длины 3, тогда' echo implode (',', $ array [3]); ' – AbraCadaver

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