【问题标题】:Search multidimensional array for value in certain key, return value of different key在多维数组中查找某个键的值,返回不同键的值
【发布时间】:2016-05-29 17:02:14
【问题描述】:

我是 php 新手,一直在使用社区和这里的答案来真正帮助我完成我正在从事的一个小项目,所以提前感谢大家到目前为止的帮助!

我正在提取格式错误的文本文件/提要中保存的大量信息,修剪特殊字符的内容,然后使用str_replace 查找其他特定字符串并将它们替换为逗号(,)或分号( ;),以创建可用的文本。然后,我想在此文本中搜索某些关键字并在其位置返回文本的其他部分。

到目前为止,我已经设法将文本分解成一个多维数组,但我现在不知道如何搜索这个数组,以便提取特定的信息。我实际上是在尝试构建一个可搜索的数组,当原始提要更新时,我可以从中提取信息。这是目前的数组示例:

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 (array 2, key 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);
    ?>

【问题讨论】:

  • print_r(json_decode($file, true));
  • 只是一个想法..您是否尝试解析 JSON 文件?如果是这样,您可能想查看一些 PHP 的 JSON 处理程序,例如 json_decode (php.net/manual/en/book.json.php)。这会让你更容易处理。
  • @whiskeyfur - 谢谢,不知道提要的格式。也许是时候阅读 JSON 了,因为我可能可以更有效地搜索数据。

标签: php arrays multidimensional-array


【解决方案1】:

由于您的数组是多维的 - 您必须对其进行迭代才能找到所需的值:

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

正如在 cmets 中已经注意到的那样 - 这不是格式错误的文本,它是 JSON。您可以简单地使用json_decode 函数从 JSON 字符串中获取数组:

$file=file_get_contents("http://www.example.com/feed/");
$ret = json_decode($file, true);
var_dump($ret);

【讨论】:

  • 太棒了...非常感谢!我现在可以根据每个索引 2 中的各种条目为整个数据集构建一个简单的搜索表单。
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
相关资源
最近更新 更多