打印出数组中所有字符串出现的索引

时间:2018-01-29 20:51:49

标签: php arrays string

我创建了一个简单的PHP脚本,用户输入一个句子(或多个句子),脚本从textarea中取出每个单词并将其分成一个数组。用户还将在数组中键入要搜索的单词。

脚本应该查看数组并打印出单词所在位置的索引。

这是我到目前为止所做的:

foreach($parts as $item) {
       if ($item == $strName) {
           $k = array_search($strName, array_values($parts));
           print "$k\n";
       }

}

但是,它只打印出字符串的第一个索引位置。因此,如果我使用的句子是"苹果从树上掉下来,它将只打印出#0; 0 0",这是该单词第一次出现在数组中(它也是如果索引是1,2,3等,则执行相同的操作。有什么我做错了吗?对不起,如果我没有包含足够的信息。

整个代码:

    <form action="sida3.php" method="post">
    Text: <textarea name="textarea"></textarea>
    <br>
    Search word: <input type="text" name="search">
    <br>
    <input type="submit" name="submit" value="Submit">
</form>
<?php
    if(isset($_POST['submit'])){
    $parts = explode(" ", $_POST['textarea']);
    $strName = $_POST['search'];
    print_r ($parts);
    echo '<br>';
    foreach($parts as $item) {
        if ($item == $strName) {
            print_r(array_keys($parts, $strName));
        }
    }
    }
 ?>

1 个答案:

答案 0 :(得分:0)

你去吧

function search_array( $needle,  $string ){
    $haystack = explode( " ", $string);
    $keys_found = array_keys( array_map( "strtolower", $haystack) , strtolower( $needle ), false);
    if( !empty( $keys_found ) ):
        return array(
                    "count" => count( $keys_found ),
                    "keys" => $keys_found
                );
    else:
        return false;
    endif;
}

var_dump( search_array("Every","Every good boy does fine, every good girl does fine") );