在多维数组中搜索某些键的值,返回不同键的值

时间:2016-02-17 19:35:20

标签: php arrays multidimensional-array

我是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);
    ?>

1 个答案:

答案 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函数

从JSON字符串中获取数组
$file=file_get_contents("http://www.example.com/feed/");
$ret = json_decode($file, true);
var_dump($ret);