获取“从多维数组中的特定键”的值并放入数组中
我有一个由中继器创建的大型数组,因此数组可以无限大。我需要:获取“从多维数组中的特定键”的值并放入数组中
- 1.搜索虽然阵列
- 2.获取的[field_18]
- 3.输出阵列中的所有的值的所有值( '-5',“-1 ”,ECT)
Array
(
[field_22] => Mid-Distance Free
[field_25] => Array
(
[0] => 1
)
[field_23] => Its a freestyle workout
[field_6] => Array
(
[0] => Array
(
[field_7] => 1
[field_8] => 0
[field_9] => 0
[field_10] => Array
(
[0] => Array
(
[field_11] => 6
[field_12] => 50
[field_13] => jumping jacks
[field_14] =>
)
[1] => Array
(
[field_11] => 2
[field_12] => 20
[field_13] => pushups
[field_14] =>
)
[acfcloneindex] => Array
(
[field_11] => 1
[field_12] => 1
[field_13] => pushups
[field_14] =>
)
)
)
[acfcloneindex] => Array
(
[field_7] => 1
[field_8] => 0
[field_9] => 0
[field_10] => Array
(
[acfcloneindex] => Array
(
[field_11] => 1
[field_12] => 1
[field_13] => pushups
[field_14] =>
)
)
)
)
[field_17] => Array
(
[0] => Array
(
[field_7] => 1
[field_8] => 0
[field_9] => 0
[field_10] => Array
(
[0] => Array
(
[field_11] => 5
[field_12] => 100
[field_13] => Freestyle
[field_14] => Descend 1-5
[field_18] => 5
)
[1] => Array
(
[field_11] => 10
[field_12] => 50
[field_13] => Drill
[field_14] => Choice
[field_18] => 5
)
[2] => Array
(
[field_11] => 1
[field_12] => 400
[field_13] => Freestyle
[field_14] => Negative Split
[field_18] => -20
)
[acfcloneindex] => Array
(
[field_11] => 1
[field_12] => 25
[field_13] => Butterfly
[field_14] =>
[field_18] =>
)
)
)
[acfcloneindex] => Array
(
[field_7] => 1
[field_8] => 0
[field_9] => 0
[field_10] => Array
(
[acfcloneindex] => Array
(
[field_11] => 1
[field_12] => 25
[field_13] => Butterfly
[field_14] =>
[field_18] =>
)
)
)
)
[field_19] => Array
(
[0] => Array
(
[field_7] => 1
[field_8] => 0
[field_9] => 1
[field_10] => Array
(
[0] => Array
(
[field_11] => 20
[field_12] => 100
[field_13] => Freestyle
[field_14] => Hold 500 race pace
[field_18] => -5
)
[1361771245813] => Array
(
[field_11] => 1
[field_12] => 75
[field_13] => Butterfly
[field_14] =>
[field_18] =>
)
[acfcloneindex] => Array
(
[field_11] => 1
[field_12] => 125
[field_13] => Butterfly
[field_14] =>
[field_18] =>
)
)
)
[acfcloneindex] => Array
(
[field_7] =>
[field_8] => 0
[field_9] => 0
[field_10] => Array
(
[acfcloneindex] => Array
(
[field_11] => 1
[field_12] => 25
[field_13] => Butterfly
[field_14] =>
[field_18] =>
)
)
)
)
[field_21] => Array
(
[acfcloneindex] => Array
(
[field_7] =>
[field_8] => 0
[field_9] => 0
[field_10] => Array
(
[acfcloneindex] => Array
(
[field_11] =>
[field_12] => 25
[field_13] => Butterfly
[field_14] =>
[field_18] =>
)
)
)
)
)
我试图去通过所有的密钥,但无法弄清楚哪里从那里去。这是我使用的代码。
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));
编辑答案请现在检查它 – 2013-02-25 06:17:08
差不多。这只返回相同大小的数组,只显示field_18的值。 – user2106176 2013-02-25 06:22:24
现在就试着解决问题 – 2013-02-25 06:43:10
您可以使用array_walk_recursive
$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;
});
附:代码没有经过测试,只是一个想法。
由于你的数组可以像你使用要求array_walk可能是危险非常大。如果您使用的是PHP 5.5,您可以构建一个简单的foreach循环并产生相应的值。这样消费函数可以根据需要获取尽可能多的条目。
你可以给一个链接或解释_因为你的数组可以是非常大的,因为你声称使用array_walk可能是dangerous_? – sectus 2013-02-25 06:33:07
array_walk将不会返回,直到整个数组已被处理。如果你使用收益率,你可以让一个消费者在20个结果之后停止。 – 2013-02-25 08:45:50
你试过了什么? SO并不是一个给我们的codez网站,试图做,如果你有问题,那么请求帮助。请阅读[FAQ](http://stackoverflow.com/faq) – 2013-02-25 06:00:49