平面文件从数组中选择值
Posted
技术标签:
【中文标题】平面文件从数组中选择值【英文标题】:Flat File select values from array 【发布时间】:2014-05-19 07:38:55 【问题描述】:我有一个平面文件,其中的数据用“,”分隔,我需要将值与 url 进行比较,并只显示具有相同 url 值的值
不需要 PHP 的 CSV 函数,如果与 url 中的值最终相同,我想比较并得到结果
csv 有 4 个值,价格,大小,宽度和高度
URL 值,以相同的顺序(价格、大小、宽度和高度)发送其他值,例如在 url 中我使用字符串 index.php?price=100&size=100&width=200&height=300 发送这个。 ....等
例如:
<?php
$csv_file=file("test.csv");
for($i=0;$i<sizeof($csv_file);$i++)
$exp_csv=explode(",",$csv_file[$i]);
foreach($exp_csv as $exp_csv2)
$csv_end_values[]=$exp_csv2
/// By Other side the url
$exp_url="100,30,400,500";
$exp_url_values=explode(",",$exp_url);
foreach($exp_url_values as $exp_url_values2)
$url_end_values[]=$exp_url_values2;
/// Finally we have 2 arrays one array with all values we
get in bucle for csv and by other side values get from url ,
now we need compare url values with values of csv ,
for example if in the url we have only 2 values and no 4 show
only results with the same of 2 values from url and compare
in the same order , if when compare the values no the same all , get 0 results
/// For example values from URL 100,,200,,
if in csv exists one row with the values 100 and 200
in the same order show as result and if no , no show
/// In this point i try use array_difference ,
but no works , because i need compare all values i send by
url and in the same order
$aa = array_diff($url_end_values,csv_end_values);
$num_results=0;
foreach($aa as $bb)
$num_results++;
if ($num_results==0)
print "We get Results";
else
print "No Results";
?>
【问题讨论】:
PHP 有一个获取 CSV 值并处理它们的函数:fgetcsv();看看吧! 不需要这个 csv 函数,我需要比较我与 url 得到的值,请阅读我的帖子 我已经阅读了你的帖子,首先,你让获得你想要的数组变得很复杂。 ASwell 我不确定你是否得到了你想要的阵列。你需要一个 $key => $value 数组来比较它 - 你只有一个数组,你得到所有值,但你有 0 感觉什么值与什么键匹配。你应该真的检查 fgetcsv() 了。 正如您在帖子中看到的那样,我从 url 获取值和从 csv 获取值,没问题,问题是它以相同的顺序将来自 url 的值与平面文件或 csv 的值进行比较如果值相同则得到结果 你想要的只是比较网址?比如 index.php?price=100&size=100 和 index.php?price=150&size=200 有什么区别? 【参考方案1】:使用 fgetcsv (http://php.net/fgetcsv) 读取 CSV 文件,而不是普通的文件方法。您将获得数组格式,并且从您的 URL 查询字符串中进行比较会更容易。
【讨论】:
请阅读我的帖子,获取值不需要 csv 函数,我需要将此值与来自 url 的值进行比较 @user3626084:阅读链接的手册页:使用正确的工具来完成这项工作!您正在读取 csv 文件,请使用专门为该类型文件创建的函数!【参考方案2】:这是基于我了解您真正想要的。
$link1 = "index.php?price=150&size=200";
$link2 = "index.php?price=100&size=100";
// separate the string by ampersand to get the get parameters.
$link1ParamsRaw = explode('&',substr(stristr($link1, '?'),1)); // the second param removes all strings from start to ?
$link2ParamsRaw = explode('&',substr(stristr($link2, '?'),1));
$link1Params = array();
$link2Params = array();
foreach($link1ParamsRaw as $param)
$param = explode('=',$param); // separate key from value
$link1Params[$param[0]] = $param[1]; // assuming all keys have values
foreach($link2ParamsRaw as $param)
$param = explode('=',$param); // separate key from value
$link2Params[$param[0]] = $param[1]; // assuming all keys have values
$differences = array_diff_assoc($link1Params, $link2Params);
var_dump($differences);
【讨论】:
以上是关于平面文件从数组中选择值的主要内容,如果未能解决你的问题,请参考以下文章