将每个单词分成一个数组

时间:2013-02-20 10:25:45

标签: php

我有一个包含以下内容的文件:

Apple 100

banana 200

Cat 300

我想在文件中搜索特定字符串并获取下一个字。例如:我搜索猫,我得到300.我已经查找了这个解决方案:How to Find Next String After the Needle Using Strpos(),但这没有帮助,我没有得到预期的输出。如果您可以在不使用正则表达式的情况下建议任何方法,我将很高兴。

4 个答案:

答案 0 :(得分:1)

我不确定这是最好的方法,但是根据您提供的数据,它会起作用。

  1. 使用fopen()
  2. 获取文件的内容
  3. 使用explode()
  4. 将值分隔为数组元素
  5. 迭代您的数组并将每个元素的索引检查为奇数或偶数。复制到新阵列。
  6. 不完美,但走在正确的轨道上。

    <?php
    $filename = 'data.txt'; // Let's assume this is the file you mentioned
    $handle = fopen($filename, 'r');
    $contents = fread($handle, filesize($filename));
    $clean = trim(preg_replace('/\s+/', ' ', $contents));
    $flat_elems = explode(' ', $clean);
    
    $ii = count($flat_elems);
    for ($i = 0; $i < $ii; $i++) {
        if ($i%2<1) $multi[$flat_elems[$i]] = $flat_elems[$i+1];
    }
    
    print_r($multi);
    

    这将输出如下的多维数组:

    Array
    (
        [Apple] => 100
        [banana] => 200
        [Cat] => 300
    )
    

答案 1 :(得分:0)

试试这个,它不使用正则表达式,但如果您搜索的字符串较长,效率会很低:

function get_next_word($string, $preceding_word)
{
  // Turns the string into an array by splitting on spaces
  $words_as_array = explode(' ', $string); 

  // Search the array of words for the word before the word we want to return
  if (($position = array_search($preceding_word, $words_as_array)) !== FALSE)
    return $words_as_array[$position + 1]; // Returns the next word
  else
    return false; // Could not find word
}

答案 2 :(得分:0)

$find = 'Apple';
preg_match_all('/' . $find . '\s(\d+)/', $content, $matches);
print_r($matches);

答案 3 :(得分:0)

您可以使用命名的正则表达式子模式来捕获您正在寻找的信息。

例如,你找到一个数字是它的前一个单词(1&lt; = value&lt; = 9999)

/*String to search*/
$str = "cat 300";
/*String to find*/
$find = "cat";
/*Search for value*/
preg_match("/^$find+\s*+(?P<value>[0-9]{1,4})$/", $str, $r);
/*Print results*/
print_r($r);

如果找到匹配项,结果数组将包含您要查找的编号为“值”的数字。

这种方法可以与

结合使用
file_get_contents($file);