php - print - get tag name wordpress
Compruebe si los valores mĂșltiples son todos falsos o verdaderos (10)
¿Cómo puedo verificar si 20 variables son verdaderas o si 20 variables son todas falsas?
Si es posible sin usar un muy largo si ...
las variables son en realidad elementos de matriz:
array (''a'' => true, ''b'' => true ...)
Para que quede más claro:
- Si la matriz tiene valores verdaderos y falsos, no se devuelve nada.
- si la matriz solo tiene valores verdaderos devuelve verdadero
- si la matriz solo tiene valores falsos, devuelve falso :)
Además, puede tener una lista o variables (no solo una matriz de valores) para verificar todos los valores con respecto a un valor determinado.
$var1 = true;
$var2 = true;
$var3 = false;
$isAllVarsTrue = !in_array(false, [$var1, $var2, $var3], true);
var_dump($isAllVarsTrue); //false
Esta pregunta es antigua, pero no importa. Quería comparar los diferentes enfoques. El método in_array()
funciona mejor ya que probablemente no necesita recorrer toda la matriz. (Las probabilidades son bajas, solo tendrías un único booleano al final, pero incluso así funciona bien).
Un enfoque que no se menciona aquí es array_sum($array)
, que devuelve 0
si todos los valores son false
, y 1+
si hay un valor true
alguna parte. Al igual que el enfoque array_filter
, no le dirá si ambos están presentes, pero es útil para averiguar si algo es true
. También agregué en una verificación básica de foreach
para mezclar o todo verdadero / falso, y un in_array
que solo verifica si algo es true
(como *_bin
abajo).
Así que aquí están los puntos de referencia. Cada caso se itera 100000 veces con una matriz de 10, 100 o 1000 booleanos aleatorios; y nuevamente con 9, 99 y 999 booleanos idénticos, con el último único (para tener un tiempo de iteración completo para in_array
). Las primeras tres verificaciones probadas producen el resultado true/false/both
solicitados, y las cuatro restantes simplemente verifican si hay un valor true
presente.
LIBROS ALEMANES
- in_array : 10 bools = 0.16 seg.
- Foreach: 10 bools = 0.122 seg.
- array_unique : 10 bools = 0.274 seg.
- foreach_bin : 10 bools = 0.095 seg.
- in_array_bin : 10 bools = 0.073 seg.
- array_sum : 10 bools = 0.074 sec
- array_filter : 10 bools = 0.118 seg.
- in_array : 100 bools = 0.153 seg.
- Foreach: 100 bools = 0.122 seg.
- array_unique : 100 bools = 2.3451 seg.
- foreach_bin : 100 bools = 0.094 seg.
- in_array_bin : 100 bools = 0.074 seg.
- array_sum : 100 bools = 0.126 seg.
- array_filter : 100 bools = 0.228 seg.
- in_array : 1000 bools = 0.154 seg.
- Foreach: 1000 bools = 0.149 seg.
- array_unique : 1000 bools = 32.6659 sec (!!)
- foreach_bin : 1000 bools = 0.075 seg.
- in_array_bin : 1000 bools = 0.074 seg.
- array_sum : 1000 bools = 0.8771 seg.
- array_filter : 1000 bools = 1.4021 seg.
LAS ÚLTIMAS DIFERENCIAS DE BOOLEAN
- in_array : 10 bools = 0.152 seg.
- Foreach: 10 bools = 0.342 seg.
- array_unique : 10 bools = 0.269 seg.
- foreach_bin : 10 bools = 0.074 seg.
- in_array_bin : 10 bools = 0.076 seg.
- array_sum : 10 bools = 0.074 sec
- array_filter : 10 bools = 0.121 seg.
- in_array : 100 bools = 0.159 seg.
- Foreach: 100 bools = 2.8072 seg.
- array_unique : 100 bools = 2.7702 seg.
- foreach_bin : 100 bools = 0.074 seg.
- in_array_bin : 100 bools = 0.09 seg.
- array_sum : 100 bools = 0.118 seg.
- array_filter : 100 bools = 0.248 seg.
- in_array : 1000 bools = 0.312 seg.
- Foreach: 1000 bools = 27.5256 seg.
- array_unique : 1000 bools = 42.1594 seg.
- foreach_bin : 1000 bools = 0.074 seg.
- in_array_bin : 1000 bools = 0.24 seg.
- array_sum : 1000 bools = 0.555 seg.
- array_filter : 1000 bools = 1.3601 seg.
Luego, en resumen. La forma array_unique
claramente sostiene la cola, ¡no la use para arreglos grandes o grandes volúmenes de arreglos! La forma de foreach
tiene una ligera ventaja sobre in_array
, pero in_array
el código no es tan elegante. La forma array_sum
está a la par con las comprobaciones "if true" para matrices más pequeñas (<100). (Me gusta la simplicidad en array_sum($array) > 0
). La forma de array_filter
retrasa un poco detrás de in_array
y foreach
. Cuando solo el último valor difiere, foreach
y array_unique
arrastran mal.
Finalmente, la función foreach
para buenos humores. Muy legible ¡La verdad está ahí fuera!
function foreach_truth_test($array)
{
$trues = $falses = false;
foreach($array as $val) {
if ($val === true) {
$trues = true;
} elseif ($val === false) {
$falses = true;
}
if ($trues === true && $falses === true) {
return ''both''; // Enough information.
}
}
// Regular Universe
if ($trues === true && $falses === false) {
return ''true'';
} // Evil Mirror Universe
elseif ($trues === false && $falses === true) {
return ''false'';
} // Intergalactic Void
else {
return ''void''; // =^_^=
}
}
PS Podría usar ''null'' arriba, pero se lee más divertido de esta manera. Comparado en Windows, por lo que las lecturas de microtiempo son grandes.
Podrías usar in_array
Ex. para todos verdad
if(in_array(false, $array, true) === false){
return true;
}
else if(in_array(true, $array, true) === false){
return false;
}
else{
return ''nothing'';
}
Si solo almacena booleanos, use esto:
$a = array(''a''=> true, ''b''=> true, ''c''=>true);
$af = array_filter($a);
if ($af == $a) {
echo "all true";
}
if (empty($af)) {
echo "all false";
}
Nota: si tiene otros valores en la matriz, se convertirán a booleanos de acuerdo con las horribles reglas de conversión de PHP.
Si todos son elementos de matriz, con valores verdaderos / falsos, entonces use array_flip ():
$new = array_flip($array); if (!isset($array[false]) && isset($array[true])) { ... there''s no false values, and at least one true value }
Esto puede resultar caro para una gran variedad, por lo que es posible que desee probar array_unique()
lugar. Obtendría una matriz con al menos dos valores (uno verdadero, uno falso).
Ok, eso no funcionaría. Enfoque de escopeta simple:
if (in_array($yourarray, false, TRUE)) {
... at least one non-true value
}
Un simple bucle servirá. Tenga en cuenta que si la matriz está vacía, se cumplen ambas condiciones (todas falsas y todas verdaderas). No verás esto en el resultado, por lo demás, pero puedes descubrir por ti mismo cómo quieres manejar esto.
// Input
$x = array (''a''=>false, ''b''=>false, ''c''=>false);
// Initialization
$anytrue = false;
$alltrue = true;
// Processing
foreach($x as $k=>$v)
{
$anytrue |= $v;
$alltrue &= $v;
}
// Display result
if ($alltrue)
echo ''All elements are true'';
elseif (!$anytrue)
echo ''All elements are false'';
else
echo ''Mixed values'';
Uno puede usar array_product
como se demuestra en php.net en un comentario :
$check[] = boolval(TRUE);
$check[] = boolval(1);
$check[] = boolval(FALSE);
$check[] = boolval(0);
$result = (bool) array_product($check);
// $result is set to FALSE because only two of the four values evaluated to TRUE
Utilice un bucle for. Si desea verificar que todas las variables son falsas, puede usar un bucle for: una vez que encuentre un elemento verdadero, puede romper el ciclo, de lo contrario las variables son todas falsas. El mismo método que puede usar si desea verificar que todas las variables son verdaderas.
// set default value
$result = false;
foreach ($array as $key => $value) {
if ($value === true) {
$result = true;
break;
}
}
// $result is now true if any value was true, otherwise it''s false
if(count(array_unique($your_array)) === 1)
return current($your_array);
else return;