Php 获取值”;“来自多维数组中的特定键”;并放入一个数组

Php 获取值”;“来自多维数组中的特定键”;并放入一个数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个巨大的数组,它是由一个带有中继器的窗体创建的,因此数组可以无限大。我需要: 一,。在数组中搜索 二,。获取[field_18]的所有值 三,。输出包含所有值('-5','-1',等)的数组 我试着把所有的钥匙都检查了一遍,但不知道从那里去哪里。这是我使用的代码 function array_keys_multi(array $array) { $keys = array(); foreach ($array as $key => $value) { $keys[] =

我有一个巨大的数组,它是由一个带有中继器的窗体创建的,因此数组可以无限大。我需要:

  • 一,。在数组中搜索
  • 二,。获取[field_18]的所有值
  • 三,。输出包含所有值('-5','-1',等)的数组
我试着把所有的钥匙都检查了一遍,但不知道从那里去哪里。这是我使用的代码

function array_keys_multi(array $array)
{
$keys = array();

foreach ($array as $key => $value) {
    $keys[] = $key;

    if (is_array($array[$key])) {
        $keys = array_merge($keys, array_keys_multi($array[$key]));
    }
}

return $keys;
}
你可以用

附加说明:代码未经测试,只是一个想法。

试试这个:

function array_key_exists_r($needle, $haystack)
{
    //$result  = array();
    global $result;
    if(is_array($haystack)){
        foreach ($haystack as $key=>$v) {
            if (is_array($v)) {
                array_key_exists_r($needle, $v);
            }
            else{
                if($key == $needle){
                   $result[] = $v;
                }
            }
        }
    }

    return $result;
}


echo "<pre>";
print_r(array_key_exists_r("field_18", $your_array));
函数数组\u键\u存在\r($needle,$haystack)
{
//$result=array();
全球$结果;
if(is_数组($haystack)){
foreach($haystack作为$key=>$v){
if(is_数组($v)){
数组\u键\u存在\u r($needle,$v);
}
否则{
如果($key==$pinder){
$result[]=$v;
}
}
}
}
返回$result;
}
回声“;
打印(数组\键\存在(字段\ 18,$your\数组));

因为您的阵列可能非常大,因为您声称使用阵列可能会很危险。如果您使用的是PHP5.5,那么可以构建一个简单的foreach循环并生成相应的值。这样,消费函数可以根据需要获取尽可能多的条目。

您尝试了什么?所以不是给我一个codez网站,尝试一下,如果你有问题,然后寻求帮助。请阅读编辑好的答案,现在请检查一下。这返回了相同大小的数组,只显示了字段_18的值。修复了此问题,请立即尝试。此操作非常有效!非常感谢你。花了这么多时间试图弄清楚它。@user2106176:Welcome你能提供一个链接或解释一下吗,因为你声称使用array\u walk可能会很危险。array\u walk在整个数组处理完毕之前不会返回。如果你使用收益率,你可以让消费者在(比如)20个结果之后停止。
$array = array(/*some data*/);
$result = array();
$search_key = 'field_18';
array_walk_recursive($array, function($item, $key)use($search_key, &$result){
if ($search_key == $key)
  $result[]=$item;
});
$search_values = array('-5', '-1');
$result2 = array();
array_walk_recursive($array, function($item, $key)use($search_values, &$result2){
if (is_array($item) && array_intersect($item, $search_values))
  $result2[]=$item;
});
function array_key_exists_r($needle, $haystack)
{
    //$result  = array();
    global $result;
    if(is_array($haystack)){
        foreach ($haystack as $key=>$v) {
            if (is_array($v)) {
                array_key_exists_r($needle, $v);
            }
            else{
                if($key == $needle){
                   $result[] = $v;
                }
            }
        }
    }

    return $result;
}


echo "<pre>";
print_r(array_key_exists_r("field_18", $your_array));