code: public static function logicalAnd(...$args)
      {
          // Return value
          $returnValue = true;
  
          // Loop through the arguments
          $aArgs = Functions::flattenArray($args);
          $argCount = -1;
          foreach ($aArgs as $argCount => $arg) {
              // Is it a boolean value?
              if (is_bool($arg)) {
                  $returnValue = $returnValue && $arg;
              } elseif ((is_numeric($arg)) && (!is_string($arg))) {
                  $returnValue = $returnValue && ($arg != 0);
              } elseif (is_string($arg)) {
                  $arg = strtoupper($arg);
                  if (($arg == 'TRUE') || ($arg == Calculation::getTRUE())) {
                      $arg = true;
                  } elseif (($arg == 'FALSE') || ($arg == Calculation::getFALSE())) {
                      $arg = false;
                  } else {
                      return Functions::VALUE();
                  }
                  $returnValue = $returnValue && ($arg != 0);
              }
          }
  
          // Return
          if ($argCount < 0) {
              return Functions::VALUE();
          }
  
          return $returnValue;
      }
docs: LOGICAL_AND.
  
  Returns boolean TRUE if all its arguments are TRUE; returns FALSE if one or more argument is FALSE.
  
  Excel Function:
  =AND(logical1[,logical2[, ...]])
  
  The arguments must evaluate to logical values such as TRUE or FALSE, or the arguments must be arrays
  or references that contain logical values.
  
  Boolean arguments are treated as True or False as appropriate
  Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False
  If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds
  the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value
  
  @category Logical Functions
  
  @param mixed ...$args Data values
  
  @return bool|string the logical AND of the arguments