比较数组并只保留真值


Compare array and keep only true value

我得到了一个像这样的真/假值数组

$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'
);

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

array_combine( $names, $bools );

这将导致:

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

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

$result = array_keys( array_combine( $names, $bools ), true );

这将只返回值为true:的密钥

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

首先,您可以使用array_filter()从第一个数组中筛选出所有false值。因此,您将得到一个数组,该数组包含您希望保留在另一个数组中的所有键。

然后,您可以使用array_intersect_key()从第二个数组和过滤后的第一个数组中获得密钥的交集,例如

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

试试这个代码,我只写了一些示例代码。根据您的需求进行定制。

$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
   }
}
 $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);

以下是具有基本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
)
$result = array_filter(array_combine($keys, $values));
$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"
}