0

我需要在表格中插入多行

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';
}
4

2 回答 2

1

为确保您的数组中只有布尔值,请对查询函数返回的值进行双重否定(当然,除非它已经返回真/假)。:

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

如果您的结果数组仅包含任何一个值,true或者false您可以使用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,如果 lambda 不可用,可以使用常规函数名称作为回调

于 2012-10-20T05:25:38.230 回答
0

如果数组中的值是string True而不是boolean true你可以使用它,否则array_product在另一个答案中使用。

$res = array_unique($your_array);
if (sizeof($res) === 1 && current($res) == 'True') {
  return 'success';
}
于 2012-10-20T05:35:21.437 回答