public static function Complex::_parseComplex in Loft Data Grids 6.2
Same name and namespace in other branches
- 7.2 vendor/phpoffice/phpexcel/unitTests/custom/Complex.php \Complex::_parseComplex()
1 call to Complex::_parseComplex()
- Complex::__construct in vendor/
phpoffice/ phpexcel/ unitTests/ custom/ Complex.php
File
- vendor/
phpoffice/ phpexcel/ unitTests/ custom/ Complex.php, line 9
Class
Code
public static function _parseComplex($complexNumber) {
// Test for real number, with no imaginary part
if (is_numeric($complexNumber)) {
return array(
$complexNumber,
0,
NULL,
);
}
// Fix silly human errors
if (strpos($complexNumber, '+-') !== FALSE) {
$complexNumber = str_replace('+-', '-', $complexNumber);
}
if (strpos($complexNumber, '++') !== FALSE) {
$complexNumber = str_replace('++', '+', $complexNumber);
}
if (strpos($complexNumber, '--') !== FALSE) {
$complexNumber = str_replace('--', '-', $complexNumber);
}
// Basic validation of string, to parse out real and imaginary parts, and any suffix
$validComplex = preg_match('/^([\\-\\+]?(\\d+\\.?\\d*|\\d*\\.?\\d+)([Ee][\\-\\+]?[0-2]?\\d{1,3})?)([\\-\\+]?(\\d+\\.?\\d*|\\d*\\.?\\d+)([Ee][\\-\\+]?[0-2]?\\d{1,3})?)?(([\\-\\+]?)([ij]?))$/ui', $complexNumber, $complexParts);
if (!$validComplex) {
// Neither real nor imaginary part, so test to see if we actually have a suffix
$validComplex = preg_match('/^([\\-\\+]?)([ij])$/ui', $complexNumber, $complexParts);
if (!$validComplex) {
throw new Exception('COMPLEX: Invalid complex number');
}
// We have a suffix, so set the real to 0, the imaginary to either 1 or -1 (as defined by the sign)
$imaginary = 1;
if ($complexParts[1] === '-') {
$imaginary = 0 - $imaginary;
}
return array(
0,
$imaginary,
$complexParts[2],
);
}
// If we don't have an imaginary part, identify whether it should be +1 or -1...
if ($complexParts[4] === '' && $complexParts[9] !== '') {
if ($complexParts[7] !== $complexParts[9]) {
$complexParts[4] = 1;
if ($complexParts[8] === '-') {
$complexParts[4] = -1;
}
// ... or if we have only the real and no imaginary part (in which case our real should be the imaginary)
}
else {
$complexParts[4] = $complexParts[1];
$complexParts[1] = 0;
}
}
// Return real and imaginary parts and suffix as an array, and set a default suffix if user input lazily
return array(
$complexParts[1],
$complexParts[4],
!empty($complexParts[9]) ? $complexParts[9] : 'i',
);
}