PHP foreach和爆炸数组代码无法正常运行

时间:2014-08-01 01:30:20

标签: php arrays csv explode

<?php
$string = file_get_contents("csv.csv");
$array = explode(",", $string);
$q = strtolower($_GET[q]);
foreach ($array as $value) {
    $result = explode(":", $value);
if (strpos($q, $result[0]) !== false) {
    $output = $result[1];
}
}

echo $output;
?>

以下是文件csv.csv的内容,我将其转换为字符串。

hello: how are you doing,
hi: what are you,
df:df

如果$_GET[q](和$q)为hello,则$outputhow are you doing。但是,如果是hi,我就不会得到输出what are you,或者如果我df我得不到df

出现这种情况的原因是什么?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你用逗号爆炸,但事实是你用逗号加上换行符分隔每个值。

爆炸后,你的阵列是[&#34;你好&#34;,&#34; \ nhi ...&#34;,&#34; \ ndf:...&#34;],那& #39;为什么没有匹配的strpos比较。

$array = explode(",\n", $string);

编辑:正如@Michael Berkowski所说,你也可以修剪参数

if (strpos($q, trim($result[0])) !== false)

参数的顺序取决于您想要提供的部分匹配类型。使用您当前的参数顺序,参数&#34; hi&#34;会匹配&#34; hi&#34;,&#34; h&#34;和&#34;我&#34;但不是&#34;高&#34;。

如果按照迈克尔的建议翻转它们,参数&#34; hi&#34;会匹配&#34;嗨&#34;和&#34;高&#34;但不是&#34; h&#34;或者&#34;我&#34;。

答案 1 :(得分:1)

使用str_getcsv

而不是手动解析CSV

使用str_getcsv并将$ _GET [q]替换为$ _GET [&#39; q&#39;]修复了问题

    $csv = file_get_contents('csv.csv');
    $array = str_getcsv($csv);
    var_dump($array);
    $q = $_GET['q'];
    foreach ($array as $value) {
        $result = explode(":", $value);
        if (strpos($q, $result[0]) !== false) {
            $output = $result[1];
        }
    }

    echo $output;