【问题标题】:Multidimensional Array - Search for value and get the sub-array多维数组 - 搜索值并获取子数组
【发布时间】:2012-03-05 18:12:31
【问题描述】:

给定一个数组

$clusters = array(
"clustera" => array(
    '101',
    '102',
    '103',
    '104'
),
"clusterb" => array(
    '201',
    '202',
    '203',
    '204'
),
"clusterc" => array(
    '301',
    '302',
    '303',
    '304'
)
);

如何搜索服务器(例如 202)并取回其集群?即搜索 202 并且响应是“clusterb”我尝试使用 array_search 但它似乎只适用于单维数组对吗? (即抱怨第二个参数是错误的数据类型,如果我给它 $clusters)

【问题讨论】:

    标签: php search multidimensional-array


    【解决方案1】:
    $search=202;
    
    $cluster=false;
    
    foreach ($clusters as $n=>$c)
      if (in_array($search, $c)) {
        $cluster=$n;
        break;
      }
    
    echo $cluster;
    

    【讨论】:

    • 发生了一些奇怪的事情。似乎你错过了一个支架或其他东西,我试图清理但无法让它工作。 $搜索=$服务器; $集群=假; foreach ($clusters as $n=>$c) { if (in_array($search,$c)) { $cluster=$n;休息; } } print("方法 2 得到:"$cluster);
    • 刚刚在这里检查了我的代码,按预期工作。你的代码最后一行写错了,print("method 2 got: "$cluster);应该是print("method 2 got: $cluster");
    • 绝对正确......但即使这不是问题......我正在使用 202 进行测试,实际上我从示例中隐藏了真实的服务器名称以保护无辜者 :) 效果很好!
    【解决方案2】:
    $arrIt = new RecursiveArrayIterator($cluster);
    $server = 202;
    
    foreach ($arrIt as $sub){
        if (in_array($server,$sub)){
            $clusterSubArr = $sub;
            break;
            }
        }
    
    $clusterX = array_search($clusterSubArr, $cluster);
    

    【讨论】:

    • 这个答案缺少教育解释。
    【解决方案3】:
    function array_multi_search($needle,$haystack){
    foreach($haystack as $key=>$data){
    
    if(in_array($needle,$data))
    return $key;
    }
    }
    $key=array_multi_search(202,$clusters);
    echo $key;
    $array=$clusters[$key];
    

    尝试使用此功能。它在 $haystack(cluster) 的直接子数组中返回 $needle(202) 的键。未经测试,如果可行,请告诉我

    【讨论】:

    • 这个也不太好用……空了。我所做的唯一更改是在函数的内容周围加上大括号。 function array_multi_search($needle,$haystack) { foreach($haystack as $key=>$data) { if(in_array($needle,$data)) return $key; } }
    【解决方案4】:
    function getCluster($val) {
       foreach($clusters as $cluster_name => $cluster) {
          if(in_array($val, $cluster)) return $cluster_name;
       }
       return false;
    }
    

    【讨论】:

    • 嗯,我得到“为 foreach() 提供的参数无效”,这很遗憾,因为它看起来正是我需要的 :)
    • $clusters 需要定义为问题中的集群数组
    猜你喜欢
    • 2012-12-08
    • 2015-06-15
    • 2014-03-23
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多