有谁知道如何从更大的数组中提取某种类型的数组?例如,请考虑var_dump()的这些结果:
[0]=>
array(5) {
["post"]=>
string(60) "Paris"
["capacity"]=>
string(5) "58515"
["region"]=>
string(60) "WHA"
["seats"]=>
string(2) "55"
["growth"]=>
string(4) "3880"
}
[1]=>
array(5) {
["post"]=>
string(60) "Tel Aviv"
["capacity"]=>
string(6) "530910"
["region"]=>
string(60) "NEA"
["seats"]=>
string(2) "65"
["growth"]=>
string(4) "3267"
}
[2]=>
array(5) {
["post"]=>
string(60) "Paris"
["capacity"]=>
string(6) "962115"
["region"]=>
string(60) "EUR"
["seats"]=>
string(2) "11"
["growth"]=>
string(4) "2660"
}
我确信对于生活在第五维度的人来说这似乎很简单,但是我有一个时间提取数组,其中我的foreach()中的region =“WHA”尝试构建一个单独的数组世界卫生大会数据。
foreach($data as $keys => $datums){
//Planning to build JSON string
if($datums['region'] == "WHA"){
//Some processing
}
}
结果应如下所示:
[0]=>
array(5) {
["post"]=>
string(60) "Paris"
["capacity"]=>
string(5) "58515"
["region"]=>
string(60) "WHA"
["seats"]=>
string(2) "55"
["growth"]=>
string(4) "3880"
}
我已经尝试过各种不同的东西,比如看一下对我来说不起作用的array_filter,我只关心正确的方式。有任何想法吗?非常感激。
答案 0 :(得分:1)
认为这应该修复你的代码。
foreach($data as $keys => $datums){
//Planning to build JSON string
if(isset($datums["region"]) && strcmp($datums["region"], "WHA") === 0){
//Some processing
}
}
答案 1 :(得分:1)
如果我理解正确,我相信你想构建一个新数组,它只包含第一个通过测试的数组中的元素。以下示例执行此操作并生成该数据的JSON编码字符串:
$new = Array();
foreach($data as $key => $datum){
//Planning to build JSON string
if ( $datum['region']=='WHA') {
$new[] = $datum;
}
}
$out = json_encode($new);
答案 2 :(得分:1)
您也可以将其封装在函数
中<?php
function filterArray($arr, $index, $filter) {
foreach( $arr as $key=>$elem ) {
if ( $elem[$index] != $filter ) {
unset($arr[$key]);
}
}
return $arr;
}
?>
如果$YourArray
是OP的数组,您可以使用它来过滤掉数组中没有“region”的索引元素的任何项目,该项目等于“WHA”
$filtered = filterArray($yourArray, "region", "WHA");
此替代版本将使用&符号(&amp;)将指针传递给原始数组。例如,如果您将此作为函数声明使用:
function filterArray(&$arr, $index, $filter) {
然后您不再需要为返回的数组设置目标,因为原始数组实际上是由函数直接修改的。
filterArray($yourArray, "region", "WHA");