Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP foreach和explode数组代码运行不正常_Php_Arrays_Csv_Explode - Fatal编程技术网

PHP foreach和explode数组代码运行不正常

PHP foreach和explode数组代码运行不正常,php,arrays,csv,explode,Php,Arrays,Csv,Explode,如果$\u GET[q](和$q)是hello,则$output是您最近怎么样。但是,如果它是hi,我不会得到输出你是什么,或者如果我得到df我不会得到df 发生这种情况的原因是什么?提前感谢您的帮助。您正在使用逗号进行分解,但事实是每个值都用逗号加换行符分隔 分解后,您的阵列为[“hello”、“\nhi…”、“\ndf:…”],这就是为什么没有匹配的strpos比较 试一试 编辑:正如@MichaelBerkowski所说,您还可以修剪参数 $array = explode(",\n", $

如果
$\u GET[q]
(和
$q
)是
hello
,则
$output
您最近怎么样
。但是,如果它是
hi
,我不会得到输出
你是什么
,或者如果我得到
df
我不会得到
df


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

您正在使用逗号进行分解,但事实是每个值都用逗号加换行符分隔

分解后,您的阵列为[“hello”、“\nhi…”、“\ndf:…”],这就是为什么没有匹配的strpos比较

试一试

编辑:正如@MichaelBerkowski所说,您还可以修剪参数

$array = explode(",\n", $string);
参数的顺序取决于要提供哪种部分匹配。根据当前参数顺序,参数“hi”将匹配“hi”、“h”和“i”,但不匹配“hi”


如果按照Michael的建议翻转它们,那么参数“hi”将匹配“hi”和“hi”,而不是“h”或“i”。

而不是手动解析CSV使用

使用str_getcsv并将$_GET[q]替换为$_GET['q']修复了这个问题

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

$\u GET[q]
应该是
$\u GET['q']
。确保始终在开发中打开错误报告和显示错误。PHP将抱怨
$\u GET[q]
中有一个
未定义的常量q
<代码>错误报告(E_全部);ini设置(“显示错误”,1)总是在开发代码时使用。@Darren从纯语法的角度来看这是一个很好的观点,但实际上我已经无数次地使用了
$\u GET[q]
,这与
$\u GET['q']
没有什么不同。此外,我确信这与发生的问题无关…@MichaelBerkowski错误报告处于打开状态。@testo但它不同。我使PHP使用了一种行为,旨在将您从自己的行为中解救出来,从而将不知道的常量转换为字符串。依赖是件坏事。如果您向
E_ALL
(不抑制通知)显示了错误报告,您肯定会看到类似于使用未定义常量q的通知-假定为“q”来澄清错误,指向
strpos()
的参数是
$haystack,$needle
,因此,您正在搜索值为
'hi'
$q
,以查找不匹配的文本字符串
'hi\n'
。如果您翻转参数
strpos($result[0],$q)
,则会匹配,但在
explode
或更高版本中使用
trim()
修剪换行符是解决方案。手动解析CSV很难看,并且会导致此问题,您应该使用,因为它会自动处理此问题。请使用
fgetcsv
,唯一需要注意的是检查设置
auto\u detect\u line\u endings
$array = explode(",\n", $string);
if (strpos($q, trim($result[0])) !== false)
    $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;