标题解释了这一切,我知道如何做到这一点,但我一直想知道是否有更短的方法这样做。
让我们说,
$mutli = array(
array('name' => 'john', 'adult' => 'true' ),
array('name' => 'eric', 'adult' => 'true' ),
array('name' => 'ryan', 'adult' => 'false' )
);
有没有更好的方法来选择成人== true的所有较低数组?
$list = array();
foreach( $multi as $sub ){
foreach( $sub as $key => $value ){
if( $key == "adult" && $value == "true" )
array_push( $list, $sub );
}
}
不紧急,但我总是很好奇。
也许
while( $key => $value as each($mutli) )
或者其他:p
答案 0 :(得分:4)
您可以使用array_filter:
$filtered = array_filter($mutli, function($v) { return $v['adult'] == 'true'; });
答案 1 :(得分:2)
如果您知道钥匙,那么您就不需要第二次预告。
foreach($multi as $sub) {
if(!empty($sub['adult']) AND $sub['adult'] == 'true') {
array_push($list, $sub);
}
}
编辑:我很好奇array_filter是否比循环更快。这就是我得到的:
结果:
array_filter rendering: 0.30101799964905
foreach rendering: 0.069003820419312
Testscript:
<?php
$mutli = array(
array('name' => 'john', 'adult' => 'true' ),
array('name' => 'eric', 'adult' => 'true' ),
array('name' => 'ryan', 'adult' => 'false' )
);
$filtered = array();
$list = array();
$start = microtime(true);
for($i = 1; $i <= 10000; $i++) {
$filtered = array_filter($mutli, function($v) { return $v['adult'] == true; });
}
echo "array_filter rendering: ".(microtime(true) - $start)."<br />";
$start = microtime(true);
for($i = 1; $i <= 10000; $i++) {
foreach($mutli as $sub) {
if(!empty($sub['adult']) AND $sub['adult'] == 'true') {
array_push($list, $sub);
}
}
}
echo "foreach rendering: ".(microtime(true) - $start)."<br />";
答案 2 :(得分:0)
为了好玩,如果你有PHP&gt; = 5.5.0(array_column
需要):
$result = array_intersect_key($multi,
array_keys(array_column($multi, 'adult'), 'true'));
array_column
array_keys
array_intersect