比较数组并保持只有真值

时间:2016-01-11 14:15:21

标签: php arrays

我有一个像这样的

的真/假值数组
$bools = array(
    0 => true,
    1 => false,
    2 => true,
    3 => true,
    4 => false
);

和另一个数组或值,如

$names = array(
    0 => 'joe',
    1 => 'bob',
    2 => 'steve',
    3 => 'mario',
    4 => 'george'
);

我需要的是获得一个返回数组(在PHP中),它只包含数组2中与数组1相比的真值。所以最终数组将是:

$result = array(
    0 => 'joe',
    1 => 'steve',
    2 => 'mario'
);

7 个答案:

答案 0 :(得分:3)

首先,您可以使用array_filter()过滤掉第一个数组中的所有错误值。因此,您最终将得到一个包含您要保留在另一个数组中的所有键的数组。

然后你可以使用array_intersect_key()来获取第二个数组和过滤后的第一个数组的交集,例如。

$result = array_intersect_key($arrayTwo, array_filter($arrayOne));

答案 1 :(得分:3)

首先,使用array_combine()组合数组:

http://%{HTTP_HOST}/example1-example2-example3-example4

这将导致:

array_combine( $names, $bools );

然后,使用array_keys()提取所需名称:

array (
  joe => true, 
  bob => false, 
  steve => true, 
  mario => true, 
  george => false)

这只会返回值为$result = array_keys( array_combine( $names, $bools ), true ); 的键:

true

答案 2 :(得分:3)

试试这段代码,我只编写代码。根据您的要求进行定制。

$a = array (true,false,true,true,false);    
$b = array ('one','two','three','four','five');
$c = array();
for ( $i=0; $i < sizeof($a); $i++) {
   if ( $a[$i] == 'true' ){
       $c[$i] = $b[$i];   //store output values into another array
   }
}

答案 3 :(得分:0)

 $a = [true,false,true,true,false];
 $b = ['bob','jiw','mow','moe','windy'];
 $final_arr = array();
 foreach($a as $k => $v){
    if($v)$final_arr[] = $b[$k];
 }
 print_r($final_arr);

答案 4 :(得分:0)

以下是基本foreach()循环的示例:

$bools = array(
    0 => true,
    1 => false,
    2 => true,
    3 => true,
    4 => false
);

$names = array(
    0 => 'joe',
    1 => 'bob',
    2 => 'steve',
    3 => 'mario',
    4 => 'george'
);

$yourArr = array();
foreach ($names as $key => $value) {
    if($bools[$key] == true){
        $yourArr[] = $value; // store required values in your required array
    }
}
echo "<pre>";
print_r($yourArr);

<强>结果:

Array
(
    [0] => joe
    [1] => steve
    [2] => mario
)

答案 5 :(得分:-1)

$result = array_filter(array_combine($keys, $values));

答案 6 :(得分:-1)

$bools = array(
    true,
    true,
    false,
    false,
    true,
);
$names = array(
    'a',
    'b',
    'c',
    'd',
    'e',
);
$result = array_values(array_intersect_key($names, array_filter($bools)));
dumpr($result);

结果:

array(3) {
    [0] = string(1) "a"
    [1] = string(1) "b"
    [2] = string(1) "e"
}