如何评估数组中的每个值都是真的并在这种情况下在Php中做一些事情?

时间:2012-10-20 05:16:24

标签: php control-structure

我需要在表格中插入多行

foreach($answers as $answer){
  $sql =<<<EOD
  INSERT INTO answer(`answer`, `question_id`) 
  VALUES ('$answer', (SELECT `id` FROM question WHERE `title` = '$title'))
  EOD;

  result_array[] = $this->db->query($sql);  
}   

我需要检查每个插入查询是否返回True。 Php中的控制结构可以让我做类似的事情:

if(each_value in result_array == 'True'){
  return 'success';
}

2 个答案:

答案 0 :(得分:1)

为了确保你的数组中只有布尔,否则会否定查询函数返回的值(当然,除非它已经返回true / false)。:

result_array[] = !! $this->db->query($sql);

备选方案#1

您可以在array(true)和结果数组(result_array)之间找到唯一值,然后使用array_diff查看大小是否等于零:

if (sizeof (array_diff (result_array, array (true)) == 0) {
  // all went well
}

备选方案#2

如果您生成的数组只包含truefalse的值,那么您可以使用array_product破解它,如下所示:

var_dump (array_product (array (true, false, true)));
var_dump (array_product (array (true, true, true)));

输出

int(0)
int(1)

array_product将数组的所有值相互相乘,并且由于true评估为整数1而false评估为整数0,因此我们可以使用此优势。



备选方案#3(不要修改源数组)

您可以将array_reduce与回调一起使用,将数组减少为单个值,例如:

if (array_reduce (result_array, function ($a,$b) {return $a && $b;}, true) == true) {
  // all went well
}

这将隐式地将数组的每个值转换为 boolean ,并为您提供您所追求的结果。

内联lambda需要更新版本的PHP,如果lambdas不可用,常规函数名可以用作回调

答案 1 :(得分:0)

如果数组中的值为string True而不是boolean true,则可以使用此值,否则请使用array_product,如另一个答案中所示。

$res = array_unique($your_array);
if (sizeof($res) === 1 && current($res) == 'True') {
  return 'success';
}