我想用PHP中的第一个字母过滤数组

时间:2011-10-24 20:57:48

标签: php

<?php
function filter($fst, $arr){
$new_arr=array();

    for($i=0;$i<=(count($arr)-1);$i++){
        if(substr($arr[$i], 0, 1) == $fst){
            $new_arr[] = $fst;
        }
    }
    return $new_arr;
}



$list = Array("Apparel","Associations","Building/Grounds","Building/Materials",
              "Dispensing","Disposables","Distributors");

$new_list[]=filter("A", $list);

for($i=0;$i<=(count($new_list)-1);$i++){ 
    echo '<li><a href="?id='.$i.'">'.$new_list[$i].'</a></li>'; 
}

?>

我创建了一个名为filter()的函数来过滤以“a”这样的字符开头的数组内容。它现在不起作用。

4 个答案:

答案 0 :(得分:1)

<强>第一
不要使用

$new_list[] = filter("A", $list);

但只是

$new_list = filter("A", $list);

因为您的代码会尝试将$new_arrayfilter()放入数组变量$new_list中的下一个自由索引

第二次

$new_arr[] = $fst;

是错误的,因为您将A设置为不匹配的新数组值。请改用:

$new_arr[] = $arr[$i];

答案 1 :(得分:1)

首先,我假设你想要打印好的单词,而不是你要检查的字符? $new_arr[] = $fst;应为$new_arr[] = $arr[$i];

其次,您将函数的结果数组添加到新数组中,而不是将数组赋值给变量。 $new_list[] =应为$new_list =

这是您的代码的更新版本。我已经标记了我做出改变的地方..

function filter($fst, $arr){
$new_arr=array();

    for($i=0;$i<=(count($arr)-1);$i++){
        if(substr($arr[$i], 0, 1) == $fst){
            $new_arr[] = $arr[$i];         <----- Changed here
        }
    }
    return $new_arr;
}



$list = Array("Apparel","Associations","Building/Grounds","Building/Materials",
              "Dispensing","Disposables","Distributors");

$new_list=filter("A", $list);  <----- And changed here

for($i=0;$i<=(count($new_list)-1);$i++){ 
    echo '<li><a href="?id='.$i.'">'.$new_list[$i].'</a></li>'; 
}

输出:

<li><a href="?id=0">Apparel</a></li>
<li><a href="?id=1">Associations</a></li>

答案 2 :(得分:0)

for($i=0;$i<=(count($arr)-1);$i++){
    if(substr($arr[$i], 0, 1) == $fst){
        //$new_arr[] = $fst; // <-- Bug is here
        $new_arr[] = $arr[$i]; // Try this
    }
}

另一个错误:

//$new_list[]=filter("A", $list); // This
$new_list = filter("A", $list); // Should be this

答案 3 :(得分:0)

foreach($arr as $word) {
  // do something with $word
}

读取比C风格的for $i循环

更好