【问题标题】:Print out the index of all occurrences of a string in an array打印出数组中所有出现的字符串的索引
【发布时间】:2018-01-29 20:51:48
【问题描述】:

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

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

这是我目前所拥有的:

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

}

但是,这只会打印出字符串的第一个索引位置。所以如果我使用的句子是“苹果从树上掉下来”,它只会打印出“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));
        }
    }
    }
 ?>

【问题讨论】:

  • $item 是什么值?字符串还是数组?我假设您使您尝试做的事情过于复杂。除了查找实例之外,一旦找到,您还打算如何处理它们?
  • print_r(array_keys($parts, $strName));
  • @joeb 一旦找到字符串的位置,它应该说“在 0 4 处找到输入字符串”和“找到 2 次字符串”。项目是数组中的字符串

标签: php arrays string


【解决方案1】:

给你

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") );

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 2017-04-24
    • 2012-11-15
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2015-08-24
    相关资源
    最近更新 更多