基于元素的值从多维数组返回行

时间:2014-04-02 15:37:02

标签: php arrays multidimensional-array

$arr_ramones = array(
          1=>array('name'=>'johnny', 'display'=>1), 
          2=>array('name'=>'joey', 'display'=>1), 
          3=>array('name'=>'cj', 'display'=>0), 
          4=>array('name'=>'deedee', 'display'=>1), 
          5=>array('name'=>'marky', 'display'=>0)
  );

我想循环播放我的数组,但只能使用显示值为1的行。

我了解了如何使用regular array执行此操作。是否可以使用多维数组完成类似的操作而不会降低性能?我的示例数组很小 - 真实世界的示例包含数千个值。

4 个答案:

答案 0 :(得分:1)

试试:

foreach ($arr_ramones as $item) {
  if ($item['display']) {
    echo $item['name'];
  }
}

或使用array_filter

$display = array_filter($arr_ramones, function($item){
  return $item['display'];
});

foreach ($display as $item) {
  echo $item['name'];
}

答案 1 :(得分:1)

如果您只想显示数据而不创建新数组,请尝试array_walk。如果要创建数组,请使用array_map

array_walk($arr_ramones, function($a) { // displaying information from array based on requirements
    if ( $a['display'] == 1) {
        echo $a['name'] . " "; // johnny joey deedee 
    }
});

$n = array_map(function($a) { // creating new array based on requirements
    if ( $a['display'] == 1) {
        return $a['name'];
    }
}, $arr_ramones);

答案 2 :(得分:1)

也适用于array_filter

$arr_ramones = array(
    1 => array('name'=>'johnny', 'display'=>1), 
    2 => array('name'=>'joey', 'display'=>1), 
    3 => array('name'=>'cj', 'display'=>0), 
    4 => array('name'=>'deedee', 'display'=>1), 
    5 => array('name'=>'marky', 'display'=>0)
);
$filter = array_filter($arr_ramones, function($arr) {
    return $arr['display'] == 1;
});

答案 3 :(得分:0)

像这样的简单foreach

foreach($arr as $k=>$arr)
{
 if($arr['display']==1)
  {
    echo $arr['name']."<br>";
  }
}

使用array_filter

function filt($var)
{
   return $var['display']==1;
}  

$new_arr=array_filter ($arr_ramones,"filt" );
print_r($new_arr);

Demo