当前位置: 首页 > 知识库问答 >
问题:

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

张俊茂
2023-03-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(数组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个答案

宗政颖逸
2023-03-14

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

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字符串中获得一个数组,只需使用json_decode函数:

$file=file_get_contents("http://www.example.com/feed/");
$ret = json_decode($file, true);
var_dump($ret);
 类似资料:
  • 问题内容: 我有一个JSON对象数组,想返回一个特定的节点。为了简化我的问题,可以说数组看起来像这样: 例如,我想知道骑士的实力。函数,返回路径,使用路径运算符可以得到强度。有没有办法将两者结合起来,所以我可以做下面的事情? 我正在使用MySQL 8.0.15。 问题答案: 本质上,您的意思是将选择和投影应用于JSON文档的数组元素和对象字段。您需要执行WHERE子句之类的操作来选择数组中的“行”

  • 这是关联数组: 我知道通过使用过滤数据并比较值的正常方法。我想在中搜索以下键/值对。 理想的输出应该是来自的第一个元素,因为它booking_name=abc,pdg=保证和user_area=es st 我尝试了: 这总是返回空数组。 仅供参考-我是新的。 更新1: 我使用下面的方法来获取具有可见。对所问问题进行了类似的尝试,但未能获得理想的结果。 如何在关联数组上应用作为数组数组传递的多个过滤

  • 问题内容: 我有这个多维数组。我需要搜索它,仅返回与“ slug”的值匹配的键。我知道还有其他有关搜索多维数组的线程,但是我对这些情况的理解还不够。非常感谢您的帮助! 所以我需要一个像这样的函数: 这是数组: 问题答案: 很简单:

  • 我有这个数组,当我搜索uid时,我需要返回找到密钥的数组,所以如果我搜索“4048”,我应该得到第二个数组。 有什么帮助吗? 提前谢谢

  • 问题内容: 您如何在中搜索密钥?在此程序中,当用户输入密钥时,代码应安排在哈希图中搜索相应的值,然后进行打印。 请告诉我为什么它不起作用。 问题答案: 只需致电:

  • 我有两个多维数组,我想通过使用其中一个数组的值和另一个数组的键来组合它们。数组如下: 阵列1: 阵列 2: 我想生成的结果数组如下: 有没有一个PHP函数可以用来完成这个任务?