我是php新手,并且一直在使用社区和答案来帮助我完成一个我正在进行的小项目,所以提前感谢大家的帮助!
我在一个格式不正确的文本文件/ Feed中提取大量信息,修剪特殊字符的内容,然后使用str_replace
查找其他特定字符串并用逗号(,)或半字符替换它们冒号(;),以便创建一段可用的文本。然后,我想在此文本中搜索某些关键字,并返回文本的其他部分。
到目前为止,我已经设法将文本分解为多维数组,但我现在无法弄清楚如何搜索此数组,以便提取特定的信息。我本质上是在尝试构建一个可搜索的数组,我可以在原始Feed更新时从中提取信息。这是现在的阵列样本:
Array
(
[0] => Array
(
[0] => 240
[1] => 1
[2] => euro
[3] => 2016-02-19 15:30:00
[4] => EUR
)
[1] => Array
(
[0] => 240
[1] => 3
[2] => euro2
[3] => 2016-02-19 15:00:00
[4] => EUR
)
[2] => Array
(
[0] => 1890
[1] => 9
[2] => uspb
[3] => 2016-02-17 22:59:00
[4] => USD
)
)
基本上,我希望能够编写一些可以搜索此数组的内容,例如uspb
(数组2,键2),如果找到,则返回保存下的值另一个关键。因此,如果我想要键0,它将返回1890
。如果我在搜索euro2
时需要密钥1,则会返回“3”。
我已经查看了大量的例子,并没有真正符合我现在所追求的目标。也许我正在以错误的方式看待这个并且使用数组并不是正确的方法。任何建议将不胜感激。
作为参考,这是我的代码副本(略有编辑)到目前为止。
<?php
$file=file_get_contents("http://www.example.com/feed/");
$trim=trim($file, "[]");
$find = array("{\"value\":\"", "\",\"date_utc\":\"", "\",\"currency\":\"");
$replace = array(",", ",", "");
$replaced = str_replace($find, $replace, $trim);
$ret = array_map (
function ($_) {return explode (',', $_);},
explode (';', $replaced)
);
print_r ($ret);
?>
答案 0 :(得分:0)
由于您的数组是多维的 - 您必须迭代它才能找到所需的值:
foreach ($ret as $value) {
// the index you want to search is always `2`?
if ($value[2] == 'uspb2') {
echo $value[0];
break;
}
}
转向功能:
function findMyValue(
$array,
$search_key,
$search_str,
$key
) {
foreach ($array as $v) {
if ($v[$search_key] == $search_str) {
return $v[$key];
}
}
return 'NOT_FOUND';
}
echo findMyValue($ret, 2, 'euro', 1); // outputs 3
echo findMyValue($ret, 2, 'uspb', 0); // outputs 1890
正如评论中已经注意到的那样 - 它不是格式不合理的文本,它是JSON。您可以使用json_decode
函数
$file=file_get_contents("http://www.example.com/feed/");
$ret = json_decode($file, true);
var_dump($ret);