【问题标题】:How to search index in all columns of multidimensional array如何在多维数组的所有列中搜索索引
【发布时间】:2019-06-28 05:51:48
【问题描述】:

我试图在嵌套数组的所有列中获取多维数组的索引。示例:

 $array = 
 [ 
      "int" => [80,85,66],
      "text" => [57,58],
      "varchar" => [82,72,70],
      "decimal" => [60,61]
 ];

我想在 php(组合)中搜索一个函数以从 Id 中获取 tpye,如下所示:

使用 61 返回“deicmal”(索引) 与 58 返回“文本”

但只结合数组php核心函数,没有for循环

【问题讨论】:

  • 循环和 in_array ?
  • 根据您需要对同一数据集执行此操作的次数,我将首先遍历该数组并创建一个新数组,将数字映射到字符串上。那么这将是一个通过搜索索引访问该数组以找到结果的简单案例。
  • 检查array_filter函数

标签: php arrays search multidimensional-array


【解决方案1】:

我不太确定你想要什么,但你可以查看这个解决方案:

<?php

$array =
[
    "int" => [80,85,66],
    "text" => [57,58],
    "varchar" => [82,72,70],
    "decimal" => [60,61]
];

getTypeFromId(61, $array);

function getTypeFromId($index, $array) {
    foreach ($array as $k => $v) {
        if (in_array($index, $v)) {
            echo "With " . $index . " return " . $k;
        }
    }
}

结果:

With 61 return decimal

【讨论】:

  • 我想要一个像 getTypeFromId($id, $array) { array_search($id, array_seacrch(...))} 这样的函数...
  • 谢谢,但我只需要没有 foreach 的 php 功能,是否可以使用 array_search 和任何组合?
  • 如果你有一个数组,但你有嵌套数组,这是可能的。
  • 好的,谢谢!如果不可能是我问题的答案:)
【解决方案2】:

参考php文档link的评论。

$array = 
[ 
      "int" => [80,85,66],
      "text" => [57,58],
      "varchar" => [82,72,70],
      "decimal" => [60,61]
];
function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}

echo recursive_array_search(61,$array); // decimal
echo recursive_array_search(58,$array); // text

【讨论】:

  • 他不想要foreach只有php核心函数。
  • array_search 递归方式,OP可以把我的递归数组搜索函数作为核心函数复用。
  • 老兄 .. 他不想遍历数组
  • 据我所知,没有这样的东西。
  • 嗯,谢谢你的回答,问题是我想知道是否有可能通过array_search或与数组搜索和php中的其他数组函数相结合得到答案,但似乎不可能。
【解决方案3】:

在这里,我们过滤原始数组以仅包含包含所需数字的数组。然后我们就得到了剩下的那个元素的键。 (假设你所有的号码都是唯一的。)

<?php

$array = 
[ 
    "int" => [80,85,66],
    "text" => [57,58],
    "varchar" => [82,72,70],
    "decimal" => [60,61]
];

$target = 70;
$filtered = array_filter($array, function($v) use ($target) {
    return in_array($target, $v);
});

echo key($filtered);

输出:

varchar

【讨论】:

    【解决方案4】:

    如果你不反对 foreach,你可以遍历你的数组和每个子数组,直到你匹配你的项目。

    <?php
    $array = 
    [ 
        "int"     => [80,85,66],
        "text"    => [57,58],
        "varchar" => [82,72,70],
        "decimal" => [60,61]
    ];
    
    function find_type($needle, $array)
    {
        foreach($array as $type => $sub)
            foreach($sub as $int)
                if($int == $needle) return $type;
    }
    
    echo find_type(60, $array);
    

    输出:

     decimal
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 2011-08-15
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多