2012-04-20 95 views
0

試圖從一個數組中獲取兩個單詞短語,但我不斷收到一個單詞短語與白色空間之前或之後的單詞。php數組仍然越來越空白和空值

$text = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $text); 
$textarray = explode(" ", $text); 
array_filter($textarray); 
$textCount = array_count_values($textarray); 
arsort($textCount); 
$twoWords = array(); 
for ($i = 0; $i<=count($textarray); ++$i) { 
    if ($textarray[$i]<>" ") { 
     $twoWords[$i] = $textarray[$i]." ".$textarray[$i + 1]; 
    } else { 
     $twoWords[$i] = "blah"; 
    } 
} 
foreach ($twoWordsCount as $tey => $val2) { 
    if ($tey == null || $tey == "" || $tey == "\r\n" || $tey == "\t" || $tey == "\r" || $tey == "\n" || $tey == "&nbsp;" || $tey == " " || $tey == " ") { 
     //do nothing 
    } else { 
     echo $val2."\n"; 
    } 
} 

出於某種原因,這只是返回值喜歡空白你好或測試,然後一個空白,但我想它返回你好測試

+0

試過'trim()'? – Blake 2012-04-20 20:23:48

+0

您能否提供您正在使用的'$ text' – Julien 2012-04-20 20:27:52

+0

輸入數據的外觀如何? – 2012-04-20 20:28:03

回答

2

不知道是什麼腳本下半年應該做的事但第一部分可以減小到一個代碼使preg_split()線

<?php 
foreach(array('hello world', ' hello world', 'hello world ', ' hello  world  ') as $input) { 
    $w = preg_split('!\s+!', $input, -1, PREG_SPLIT_NO_EMPTY); 
    var_dump($w); 
} 

打印

array(2) { 
    [0]=> 
    string(5) "hello" 
    [1]=> 
    string(5) "world" 
} 
array(2) { 
    [0]=> 
    string(5) "hello" 
    [1]=> 
    string(5) "world" 
} 
array(2) { 
    [0]=> 
    string(5) "hello" 
    [1]=> 
    string(5) "world" 
} 
array(2) { 
    [0]=> 
    string(5) "hello" 
    [1]=> 
    string(5) "world" 
} 

編輯:也許你正在尋找這樣的事情

<?php 
$input = getData(); 
$w = preg_split('![\s[:punct:]]+!', $input, -1, PREG_SPLIT_NO_EMPTY); 
$w = array_count_values($w); 
arsort($w); 
$ci = new CachingIterator(new ArrayIterator($w)); 
foreach($ci as $next=>$cnt) { 
    printf("%s(%d) %s(%d)\n", 
     $next, $cnt, 
     $ci->getInnerIterator()->key(), $ci->getInnerIterator()->current() 
    ); 
} 


function getData() { 
    return <<< eot 
Mary had a little lamb, 
whose fleece was white as snow. 

And everywhere that Mary went, 
the lamb was sure to go. 

It followed her to school one day 
which was against the rules. 

It made the children laugh and play, 
to see a lamb at school. 

And so the teacher turned it out, 
but still it lingered near, 

And waited patiently about, 
till Mary did appear. 

"Why does the lamb love Mary so?" 
the eager children cry. 

"Why, Mary loves the lamb, you know." 
the teacher did reply. 
eot; 
} 

它打印

the(8) lamb(5) 
lamb(5) Mary(5) 
Mary(5) was(3) 
was(3) And(3) 
And(3) to(3) 
to(3) It(2) 
It(2) school(2) 
school(2) so(2) 
so(2) Why(2) 
Why(2) did(2) 
did(2) it(2) 
it(2) teacher(2) 
teacher(2) children(2) 
children(2) a(2) 
a(2) waited(1) 
waited(1) patiently(1) 
patiently(1) about(1) 
about(1) till(1) 
[...] 
white(1) went(1) 
went(1) (0) 

看到http://docs.php.net/class.cachingiterator

0

這將提取的前兩個單詞不管有多少個空格,製表符或行-breaks are there

$text = trim(preg_replace('/[\s\t\r\n]+/', ' ', $text)); 
$firstTwoWords = substr($text, 0, strpos($text, ' ', strpos($text, ' ') + 1));