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

各挿入クエリが return であることを確認する必要がありますTrue。Php の制御構造とは、次のようなことを可能にします。

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

2 に答える 2

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

結果の配列がいずれかの値のみで構成されている場合、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にキャストされ、目的の結果が得られます。

インライン ラムダには最新バージョンの PHP が必要です。ラムダが利用できない場合は、通常の関数名をコールバックとして使用できます。

于 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 に答える