1

配列内の空の値を削除し、1つの単語のみを含む値を削除したい。

これは私のコードです:

$all = "smart lion, smart duck, small ant, , pig";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);
for ($i = 0; $i < (count($allkey)); $i++)
{
    if (str_word_count($allkey[$i]) < 2)
    {
        unset($allkey[$i]);
    }
    else
    {
        echo $allkey[$i]."<br />";
    }
}

空の値と単語「pig」を削除したいので、このコードを機能させるのを手伝ってください。ありがとうございました。

4

5 に答える 5

0

コードがあります

$all = "smart lion, smart duck, small ant, , pig, pelican";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);
for ($i = 0; $i < (count($allkey)); $i++)
{
    //we count the number of words
    $allwords = explode (' ',$allkey[$i]);
    //Remove empty words
    for ($j = 0; $j < (count($allwords)); $j++) {
        if ($allwords[$j]=="") unset($allwords[$j]);
    }
    if (count($allwords)<2)
        unset($allkey[$i]);
    else
        echo trim($allkey[$i])."\n";
}

http://codepad.org/j6B2eEEX

于 2012-12-05T10:40:04.420 に答える
0

次のように実行できます。

$arr = explode(',',"smart lion, smart duck, small ant, , pig");
foreach($arr as $ky => $val) {
    if (strpos(trim($val),' ') === false) {
            unset($arr[$ky]);
        }
}
var_dump($arr);

上記のエコー:

array(3){[0] => string(10) "smart lion" [1] => string(11) "smart duck" [2] => string(10) "small ant"}

于 2012-12-05T10:51:47.480 に答える
0
<?php

$all = "smart lion, smart duck, small ant, , pig";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);

$allkey = array_map( 'trim', $allkey );
$allkey = array_filter( $allkey );

var_dump( $allkey );

array_mapは配列をウォークスルーし、関数trimを実行して、先頭と末尾のスペースを削除します。array_filterは、falseと評価されるときに空の値を削除します。

他の方法:

<?php   
$all = "smart lion, smart duck, small ant, , pig";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);

foreach( $allkey as $key => $entry ) {
 $entry = trim( $entry );

 if( empty($entry) ) {
   unset( $allkey[$key] );
 }
}

var_dump( $allkey );
于 2012-12-05T10:39:29.993 に答える
0

まず第一に、私はtrim()ループの中に

for ($i = 0; $i < (count($allkey)); $i++)
{
    $elem = trim($allkey[$i]);
}

次に、2語未満の値をスキップするには、それを別の配列に書き込みます。for(...)したがって、ループの前に追加します。

$foundelems = array();

そして、for(...)ループ内で、それを行いますif

if(str_word_count($elem) >= 2) {
    $foundelems[] = $elem;
}

$foundelems配列に適切なアイテムがあります。すべて一緒に:

$all = "smart lion, smart duck, small ant, , pig";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);
$foundelems = array();
for ($i = 0; $i < (count($allkey)); $i++)
{
    $elem = trim($allkey[$i]);
    if(str_word_count($elem) >= 2) {
        $foundelems[] = $elem;
    }
}
于 2012-12-05T10:42:17.830 に答える
0

カスタムコールバック関数を使用してarray_filterを1回呼び出すだけで、必要なことを正確に実現できます。

$all = "smart lion, smart duck, small ant, , pig";
// get array of unique, trimmed elements
$exploded = array_unique(array_map('trim', explode(',', $all)));
$allkey = array_filter($exploded, function($el) {
  $val = trim($el);
  // return false if empty or only one word, which will remove the element from the array
  return (!empty($val) && str_word_count($val) >= 2);
});
于 2012-12-05T10:47:15.133 に答える