checking data format with a function instead of multiple preg_matches - php

I'm trying to check the data format of multiple variables, 21 to be precise, with a function instead of using a preg_match for every single variable as they are supposed to be dates, numeric, alphabetic, alphanumeric and not empty and I'm using the following function for multiple data check in a single row, the function seems to return false, is there anything wrong with them?Thanks for any help in advance, here's the code.
<?php
function alphabetic_check(){
$numargs = func_num_args();
$arg_list = func_get_args();
for($n = 0; $n < $numargs; $n++){
$x = preg_match("^[a-zA-Z\s]*$/", $arg_list[$n]);
if($x == false){
return false;
} else if($n == $numargs - 1 && $x == true){
return true;
}
}
}
function numeric_check(){
$numargs = func_num_args();
$arg_list = func_get_args();
for($n = 0; $n < $numargs; $n++){
$x = preg_match("^[0-9]*$/", $arg_list[$n]);
if($x == false){
return false;
} else if($n == $numargs - 1 && $x == true){
return true;
}
}
}
function alphanumeric_check(){
$numargs = func_num_args();
$arg_list = func_get_args();
for($n = 0; $n < $numargs; $n++){
$x = preg_match("^[a-zA-Z0-9\s]*$/", $arg_list[$n]);
if($x == false){
return false;
} else if($n == $numargs - 1 && $x == true){
return true;
}
}
}
function not_empty(){
$n = func_num_args();
$args = func_get_args();
for($i = 0; $i < $n; $i++){
$x = !empty($args[$i]);
if($x == false){
return false;
} else if($i == $n - 1 && $x == true){
return true;
}
}
}
?>
and here's the code for kinda a reservation system I'm developing returning a promt saying that the data format is incorrect even if it is supposed to excecute the code inside the if block...
if(numeric_check($id, $cellphone, $people, $single, $double, $twin, $superior, $suite, $triple, $quadruple, $disabled, $ccn, $ccm, $ccy, $cccvc) && alphabetic_check($fistname, $lastname, $type) && not_empty($id, $user, $firstname, $lastname, $cellphone, $arrival, $departure, $people, $ccn, $ccm, $ccy, $cccvc, $type)){
echo "ok";
} else {
mysqli_close($connection);
echo "
<script type=\"text/javascript\">
window.alert('Data format wrong, retry.');
window.location.replace('control_panel.php');
</script>
";
}
This is the handwritten code that actually works but I was wondering how to squeeze this stuff as above:
if(preg_match("/^[0-9]*$/", $id) && preg_match("/^[a-zA-Z0-9\-\_]*$/", $user) && preg_match("/^[a-zA-Z\s]*$/", $firstname) && preg_match("/^[a-zA-Z\s]*$/", $lastname) && preg_match("/^[\+0-9]{10,}$/", $cellphone) && preg_match("/^[0-9\-]*$/", $arrival) && preg_match("/^[0-9\-]*$/", $departure) && preg_match("/^[0-9]*$/", $people) && $people > 0 && preg_match("/^[0-9]{16}$/", $ccn) && preg_match("/^[0-9]{1,2}$/", $ccm) && preg_match("/^[0-9]{4}$/", $ccy) && preg_match("/^[0-9]{3}$/", $cccvc) && preg_match("/^[a-z]*$/", $type) && !empty($id) && !empty($user) && !empty($firstname) && !empty($lastname) && !empty($cellphone) && !empty($arrival) && !empty($departure) && !empty($people) && !empty($ccn) && !empty($ccm) && !empty($ccy) && !empty($cccvc) && !empty($type)){
echo "ok";
} else {
mysqli_close($connection);
echo "
<script type=\"text/javascript\">
window.alert('Formato dati errato, riprova.');
window.location.replace('pannello.php');
</script>
";
}
Question solved by Mark, here below the working code with some tests:
<?php
function alphabetic_check(){
$numargs = func_num_args();
$arg_list = func_get_args();
for($n = 0; $n < $numargs; $n++){
$x = preg_match("/^[a-zA-Z\s]*$/", $arg_list[$n]);
if($x == false){
return false;
} else if($n == $numargs - 1){
return true;
}
}
}
function numeric_check(){
$numargs = func_num_args();
$arg_list = func_get_args();
for($n = 0; $n < $numargs; $n++){
$x = preg_match("/^[0-9]*$/", $arg_list[$n]);
if($x == false){
return false;
} else if($n == $numargs - 1){
return true;
}
}
}
function alphanumeric_check(){
$numargs = func_num_args();
$arg_list = func_get_args();
for($n = 0; $n < $numargs; $n++){
$x = preg_match("/^[a-zA-Z0-9\s]*$/", $arg_list[$n]);
if($x == false){
return false;
} else if($n == $numargs - 1){
return true;
}
}
}
function not_empty(){
$n = func_num_args();
$args = func_get_args();
for($i = 0; $i < $n; $i++){
$x = !empty($args[$i]);
if($x == false){
return false;
} else if($i == $n - 1){
return true;
}
}
}
$a = "voda";
$b = 17;
$c = "coding101";
$d = NULL;
echo "Alphabetic check: " . (alphabetic_check($a, $b, $c) ? "true" : "false") . "<br /><br />";
echo "Alphanumeric check: " . (alphanumeric_check($a, $b, $c) ? "true" : "false") . "<br /><br />";
echo "Numeric check: " . (numeric_check($a, $b, $c) ? "true" : "false") . "<br /><br />";
echo "Not empty: " . (not_empty($a, $b, $c) ? "true" : "false") . "<br /><br />";
echo "Not empty 2: " . (not_empty($a, $b, $c, $d) ? "true" : "false") . "<br /><br />";
?>

I can see a couple of problems:
None of your preg_matches have an opening delimeter, e.g. you have: preg_match("^[a-zA-Z\s]*$/", this is missing a forward slash at the start, should be: preg_match("/^[a-zA-Z\s]*$/". This applies to all preg_matches so a error is thrown.
You have an incorrectly named variable, you have alphabetic_check($fistname, , should be $firstname as used elsewhere
Fixing those 2 and plugging in some valid data and your functions work fine.
May I suggest a slight change to the functions though that may make them easier toread, for example:
function alphabetic_check(){
$arg_list = func_get_args();
$valid = true;
foreach($arg_list as $arg){
if(!preg_match("/^[a-zA-Z\s]*$/", $arg))
{
$valid = false;
break;
}
}
return $valid;
}
With my version we set a variable, $valid, to be true. If any of the preg_matches fail then we set valid to false and break out the loop. This way there is no need to check if you are on the last arg in the list. As a result you can also change to a foreach loop and no need to count the number of arguments passed in.

Related

PHP Function to detect rar files completion (*.r01) not working with *.s01

I have a php function to detect multiple rar file completion. The problem i have is that when old style rar is used eg:
archive.rar
archive.r01
archive.r02
archive.r03
......
archive.r99
The limit is archive.r99 and then goes to:
archive.s01
archive.s02
archive.s03
I can't do anything about the source.. and I have no idea how to adjust this function.
I tried do a || in strpos:
if (strpos($b[0], '.r') > - 1 || strpos($b[0], '.s') > - 1 ) {
but that doesn't work. It doesn't detect the s01 and keeps saying incomplete archive/missing files s01, s02, s03 etc...
here is the function:
private function detectMissingFiles($array) {
$typ = 0;
$tid = $t["id"];
$breaked = false;
$arr = array();
foreach($array as $b) {
if (stripos($b[0], 'disc') > - 1) {
return false;
}
if (strpos($b[0], '/') > - 1) {
continue;
}
if ($typ == 0) {
if (strpos($b[0], '.part0') > - 1) {
$typ = 2;
}
else
if (strpos($b[0], '.r') > - 1) {
$typ = 1;
}
else {
continue;
}
}
if ($typ == 1) {
if (is_numeric($s = substr($b[0], -2))) {
$arr[] = array(
id => $s,
s => $b[1]
);
}
}
else
if ($typ == 2) {
if (is_numeric($s = substr($b[0], -6, 2)) && substr($b[0], -4) == '.rar') {
$arr[] = array(
id => $s,
s => $b[1]
);
}
}
}
asort($arr);
if ($typ == 1) $sista = - 1;
else
if ($typ == 2) $sista = 0;
$status = "";
$antal = count($arr) - 1;
if ($antal > 30) {
foreach($arr as $ar) {
if ($antal > $ar["id"]) {
if ($ar["s"] < 50000000) {
$status.= L::get("WRONG_RAR_FILE_SIZE", [$ar["id"]]);
}
}
if ($sista + 1 != $ar["id"]) {
$status.= L::get("MISSING_FILE", [$sista + 1]);
}
$sista = $ar["id"];
}
if (strlen($status) > 1 && strlen($status) < 200) return $status;
else return 0;
}
}
I am hoping someone can enlighten me here. Thank you in advance!
my best guess is that the "old style rar" name algorithm is as follows:
function rar_int_to_string(int $i):string{
$c="r";
while($i>99){
++$c;
$i-=99;
}
if($i<10){
$c=$c."0";
}
return $c.$i;
}
which produces
r01>r02>r03>r04>r05>r06>r07>r08>r09>r10>r11>r12>r13>r14>r15>r16>r17>r18>r19>r20>r21>r22>r23>r24>r25>r26>r27>r28>r29>r30>r31>r32>r33>r34>r35>r36>r37>r38>r39>r40>r41>r42>r43>r44>r45>r46>r47>r48>r49>r50>r51>r52>r53>r54>r55>r56>r57>r58>r59>r60>r61>r62>r63>r64>r65>r66>r67>r68>r69>r70>r71>r72>r73>r74>r75>r76>r77>r78>r79>r80>r81>r82>r83>r84>r85>r86>r87>r88>r89>r90>r91>r92>r93>r94>r95>r96>r97>r98>r99>s01>s02>s03>s04>s05>s06>s07>s08>s09>s10>s11>s12>s13>s14>s15>s16>s17>s18>s19>s20>s21>s22>s23>s24>s25>s26>s27>s28>s29>s30>s31>s32>s33>s34>s35>s36>s37>s38>s39>s40>s41>s42>s43>s44>s45>s46>s47>s48>s49>s50>s51>s52>s53>s54>s55>s56>s57>s58>s59>s60>s61>s62>s63>s64>s65>s66>s67>s68>s69>s70>s71>s72>s73>s74>s75>s76>s77>s78>s79>s80>s81>s82>s83>s84>s85>s86>s87>s88>s89>s90>s91>s92>s93>s94>s95>s96>s97>s98>s99>t01>t02>t03>t04>t05>t06>t07>t08>t09>t10>t11>t12>t13>t14>t15>t16>t17>t18>t19>t20>t21>t22>t23>t24>t25>t26>t27>t28>t29>t30>t31>t32>t33>t34>t35>t36>t37>t38>t39>t40>t41>t42>t43>t44>t45>t46>t47>t48>t49>t50>t51>t52>t53>t54>t55>t56>t57>t58>t59>t60>t61>t62>t63>t64>t65>t66>t67>t68>t69>t70>t71>t72>t73>t74>t75>t76>t77>t78>t79>t80>t81>t82>t83>t84>t85>t86>t87>t88>t89>t90>t91>t92>t93>t94>t95>t96>t97>t98>t99>u01>u02>u03>u04>u05>u06>u07>u08>u09>u10>u11>u12>u13>u14>u15>u16>u17>u18>u19>u20>u21>u22>u23>u24>u25>u26>u27>u28>u29>u30>u31>u32>u33>u34>u35>u36>u37>u38>u39>u40>u41>u42>u43>u44>u45>u46>u47>u48>u49>u50>u51>u52>u53>u54>u55>u56>u57>u58>u59>u60>u61>u62>u63>u64>u65>u66>u67>u68>u69>u70>u71>u72>u73>u74>u75>u76>u77>u78>u79>u80>u81>u82>u83>u84>u85>u86>u87>u88>u89>u90>u91>u92>u93>u94>u95>u96>u97>u98>u99>v01>v02>v03>v04>v05>v06>v07>v08>v09>v10>v11>v12>v13>v14>v15>v16>v17>v18>v19>v20>v21>v22>v23>v24>v25>v26>v27>v28>v29>v30>v31>v32>v33>v34>v35>v36>v37>v38>v39>v40>v41>v42>v43>v44>v45>v46>v47>v48>v49>v50>v51>v52>v53>v54>v55>v56>v57>v58>v59>v60>v61>v62>v63>v64>v65>v66>v67>v68>v69>v70>v71>v72>v73>v74>v75>v76>v77>v78>v79>v80>v81>v82>v83>v84>v85>v86>v87>v88>v89>v90>v91>v92>v93>v94>v95>v96>v97>v98>v99>w01>w02>w03>w04>w05>w06>w07>w08>w09>w10>w11>w12>w13>w14>w15>w16>w17>w18>w19>w20>w21>w22>w23>w24>w25>w26>w27>w28>w29>w30>w31>w32>w33>w34>w35>w36>w37>w38>w39>w40>w41>w42>w43>w44>w45>w46>w47>w48>w49>w50>w51>w52>w53>w54>w55>w56>w57>w58>w59>w60>w61>w62>w63>w64>w65>w66>w67>w68>w69>w70>w71>w72>w73>w74>w75>w76>w77>w78>w79>w80>w81>w82>w83>w84>w85>w86>w87>w88>w89>w90>w91>w92>w93>w94>w95>w96>w97>w98>w99>x01>x02>x03>x04>x05>x06>x07>x08>x09>x10>x11>x12>x13>x14>x15>x16>x17>x18>x19>x20>x21>x22>x23>x24>x25>x26>x27>x28>x29>x30>x31>x32>x33>x34>x35>x36>x37>x38>x39>x40>x41>x42>x43>x44>x45>x46>x47>x48>x49>x50>x51>x52>x53>x54>x55>x56>x57>x58>x59>x60>x61>x62>x63>x64>x65>x66>x67>x68>x69>x70>x71>x72>x73>x74>x75>x76>x77>x78>x79>x80>x81>x82>x83>x84>x85>x86>x87>x88>x89>x90>x91>x92>x93>x94>x95>x96>x97>x98>x99>y01>y02>y03>y04>y05>y06>y07>y08>y09>y10>y11>y12>y13>y14>y15>y16>y17>y18>y19>y20>y21>y22>y23>y24>y25>y26>y27>y28>y29>y30>y31>y32>y33>y34>y35>y36>y37>y38>y39>y40>y41>y42>y43>y44>y45>y46>y47>y48>y49>y50>y51>y52>y53>y54>y55>y56>y57>y58>y59>y60>y61>y62>y63>y64>y65>y66>y67>y68>y69>y70>y71>y72>y73>y74>y75>y76>y77>y78>y79>y80>y81>y82>y83>y84>y85>y86>y87>y88>y89>y90>y91>y92>y93>y94>y95>y96>y97>y98>y99>z01>z02>z03>z04>z05>z06>z07>z08>z09>z10>z11>z12>z13>z14>z15>z16>z17>z18>z19>z20>z21>z22>z23>z24>z25>z26>z27>z28>z29>z30>z31>z32>z33>z34>z35>z36>z37>z38>z39>z40>z41>z42>z43>z44>z45>z46>z47>z48>z49>z50>z51>z52>z53>z54>z55>z56>z57>z58>z59>z60>z61>z62>z63>z64>z65>z66>z67>z68>z69>z70>z71>z72>z73>z74>z75>z76>z77>z78>z79>z80>z81>z82>z83>z84>z85>z86>z87>z88>z89>z90>z91>z92>z93>z94>z95>z96>z97>z98>z99>aa01>aa02>aa03>aa04>aa05>aa06>aa07>aa08>aa09>aa10>aa11>aa12>aa13>aa14>aa15>aa16>aa17>aa18>aa19>aa20>aa21>aa22>aa23>aa24>aa25>aa26>aa27>aa28>aa29>aa30>aa31>aa32>aa33>aa34>aa35>aa36>aa37>aa38>aa39>aa40>aa41>aa42>aa43>aa44>aa45>aa46>aa47>aa48>aa49>aa50>aa51>aa52>aa53>aa54>aa55>aa56>aa57>aa58>aa59>aa60>aa61>aa62>aa63>aa64>aa65>aa66>aa67>aa68>aa69>aa70>aa71>aa72>aa73>aa74>aa75>aa76>aa77>aa78>aa79>aa80>aa81>aa82>aa83>aa84>aa85>aa86>aa87>aa88>aa89>aa90>aa91>aa92>aa93>aa94>aa95>aa96>aa97>aa98>aa99>ab01>ab02>ab03>ab04>ab05>ab06>ab07>ab08->ab09
and so on, with "ab09" meaning "file chunk #999"

PHP Syntax error on empty line: syntax error, unexpected '}' [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 5 years ago.
Improve this question
Parse error: syntax error, unexpected '}', expecting end of file
it occurs is on an empty line between my removeWalls function and the setup comment but I am positive that there are no missing semicolons or unclosed brackets. Does anyone know why this is happening and how to fix it?
$cols;
$rows;
$w = 20;
$grid = new jsarray();
$current;
$stack = new jsarray();
$height = 600;
$width = 600;
$cols = floor($width/$w);
$rows = floor($height/$w);
function index($i, $j) {
if ($i < 0 || $j < 0 || $i > $cols - 1 || $j > $rows - 1) {
return -1;
}
return $i + $j * $cols;
}
// Classes
class Cell{
function __construct($i,$j){
$this->i = $i;
$this->j = $j;
$this->walls = new jsarray(true,true,true,true);
$this->visited = false;
}
}
function removeWalls($a, $b) {
$x = $a->i - $b->i;
if ($x === 1) {
$a->walls(3,false);
$b->walls(1,false);
} else if (x === -1) {
$a->walls(1,false);
$b->walls(3,false);
}
$y = $a->j - $b->j;
if ($y === 1) {
$a->walls(0,false);
$b->walls(2,false);
} else if (y === -1) {
$a->walls(2,false);
$b->walls(0<false);
}
}
// Setup
for($j = 0;$j < $rows;$j++){
for($i = 0;$i < $cols;$i++){
$cell = new Cell($i,$j);
$grid->push($cell);
}
}
$current = $grid(0);
?>
JSarray Class:
<?php
Class jsarray{
function __construct(...$vals_){
$this->vals = array();
$this->cnt = -1;
if($vals_ != NULL){
if($vals_ > 0 && $vals_ > 1){
foreach($vals_ as $val){
$this->vals[(string) $this->cnt] = $val;
$this->cnt++;
}
}
}
$this->length = $this->cnt+1;
}
function push(...$elements){
if($elements != NULL && $elements > 0){
foreach($elements as $element){
$this->vals[(string) $this->cnt] = $element;
$this->cnt++;
}
}
$this->length = $this->cnt+1;
}
function pop(){
if($this->length > 0){
array_pop($this->vals);
$this->cnt--;
}
$this->length = $this->cnt+1;
}
function __invoke(int $indx,$exchange,...$vals0){
if($indx != NULL && $indx > -1){
return $this->vals[(string) ($indx-1)];
} else if($exchange != NULL && $indx > -1) {
$this->vals[(string) ($indx-1)] = $exchange;
} else if($vals0 != NULL){
$this->vals = array();
$this->cnt = -1;
$this->cnt = -1;
if($vals_ > 0 && $vals_ > 1){
foreach($vals_ as $val){
$this->vals[(string) $this->cnt] = $val;
$this->cnt++;
}
}
}
}
}
function concat(self ...$arrays){
if($arrays > 0 && $arrays != NULL){
$finalarr = $this;
foreach($arrays as $array){
$finalarr->vals = array_merge_recursive($finalarr->vals,$array->vals);
}
$finalarr->length = count($finalarr->vals);
$finalarr->cnt = $finalarr->length-1;
return $finalarr;
}
}
function reverse(){
$this->vals = array_reverse($this->vals);
}
}
// one $ for every line of this file
?>
If anyone is interested I was trying to translate some JS to PHP and the JS and PHP are both on this page: https://github.com/AlexDvorak/PHP-Coding-Train
Missing $ sign on the line } else if (y === -1) {, should be } else if ($y === -1) {.
Also this $b->walls(0<false); should probably be $b->walls(0, false);
You have some errors in removeWalls function. Missing $ sign and invalid arguments
change it like below:
function removeWalls($a, $b) {
$x = $a->i - $b->i;
if ($x === 1) {
$a->walls(3,false);
$b->walls(1,false);
} else if ($x === -1) { //<-------------Mark here
$a->walls(1,false);
$b->walls(3,false);
}
$y = $a->j - $b->j;
if ($y === 1) {
$a->walls(0,false);
$b->walls(2,false);
} else if ($y === -1) { //<-------------Mark here
$a->walls(2,false);
$b->walls(0,false); //<-------------Mark here
}
}

Why isn't count counting anything?

I'm having trouble making a simple count work. Right now 0 is constantly displayed when I run the code and I know it's because I set count to 0. But it should be displaying the number of times "Fizz" is displayed.
I'm sure it's simple but I just can't see what!
public function __construct($firstParam, $secondParam, $firstSound = "Fizz", $secondSound = "Buzz", $numbers = 100) {
$this->firstParam = $firstParam;
$this->secondParam = $secondParam;
$this->firstSound = $firstSound;
$this->secondSound = $secondSound;
$this->numbers = $numbers;
$this->numsArray = $numsArray;
}
public function __toString() {
$count = 0;
for ($i = 0; $i < count($this->numsArray); $i++){
$val = $this->numsArray[$i];
if ($val == $this->firstSound) {
$count++;
}
}
$print = "Number of Fizzes: ".$count;
return $print;
}
public function execute() {
$this->numsArray = array();
if ($this->secondParam > $this->firstParam) {
for ($i = 1; $i <= $this->numbers; $i++){
if ($i % $this->firstParam == 0 && $i % $this->secondParam == 0) {
$this->numsArray[] = "\n".$this->firstSound.$this->secondSound."\n";
} elseif ($i % $this->firstParam == 0) {
$this->numsArray[] = "\n".$this->firstSound."\n";
} elseif ($i % $this->secondParam == 0) {
$this->numsArray[] = "\n".$this->secondSound."\n";
} else {
$this->numsArray[] = "\n".$i."\n";
}
echo $this->numsArray[$i-1];
}
} else {
echo "\n".' First Number Bigger Than Second '."\n";
}
}
In your execute you are not assigning the values to numsArray[i] also you inject new line characters that will not match the equality you just when checking $val. Also I notice you use zero index to check them and index 1 to load it. Change execute to:
for ($i = 0; $i < $this->numbers; $i++){
if ($i % $this->firstParam == 0 && $i % $this->secondParam == 0) {
$this->numsArray[i] = $this->firstSound.$this->secondSound;
} elseif ($i % $this->firstParam == 0) {
$this->numsArray[i] = $this->firstSound;
} elseif ($i % $this->secondParam == 0) {
$this->numsArray[i] = $this->secondSound;
} else {
$this->numsArray[i] = $i;
}
echo $this->numsArray[$i];
This is a better binary string comparison for php...
if (strcmp($val, $this->firstSound) == 0)

Check Prime Number In PHP

My html document has the following form:
<form action="PrimeNumber.php" method="post">
Enter a number to determine if it is a prime number: <input type="text" name="numb" size="10">
<input type="submit" value="Check for Primeness">
</form>
Edit: Using a different code now but can't get it to echo a statement no matter what I do. Anyone know how I can make it echo is a prime number or is not.
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['numb'])) {
$num = $_POST['numb'];
function isPrime($num) {
if($num == 1) {
return false;
}
if($num == 2) {
return true;
}
if($num % 2 == 0) {
return false;
}
for($i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) {
if($num % $i == 0)
return false;
}
return true;
}
}
}
?>
simple and easy to understand code, and working as well. do little changes according to your requirement, like assign input text value to $a variable and you good to go.
$a = 51;
for($i=2; $i < $a; $i++){
if($a % $i == 0){
echo "Numberis not prime.";
break;
}
else{
echo "Number is not prime.";
break;
}
}
A simple function to check is prime number:
function is_prime($p) {
return ($p > 1) && (($p%2 >= 1) && ($p%3 >= 1) && ($p%5 >= 1)) || in_array($p, [2,3,5]);
}
function checkPrime($num){
$isPrime = true;
for($i = 2; $i <= sqrt($num); $i++)
{
if($num % $i == 0)
{
$isPrime = false;
}
}
if($isPrime == true)
{
return "$num is prime number";
}else{
return "$num is not prime number";
}
}
echo checkPrime(29);
The output is
29 is prime number
For More Details
You may use the gmp package and correct your code because I got an output as 11 not being a prime number or use the following function as an alternative.
function isPrime($num) {
if($num == 1) {
return false;
}
if($num == 2) {
return true;
}
if($num % 2 == 0) {
return false;
}
for($i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) {
if($num % $i == 0)
return false;
}
return true;
}
More information is available at the following page.
A simple function to help you find out if a number is a prime number
<?php
function fn_prime($number) {
$i = 2; $result = TRUE;
while($i < $number) {
if(!($number%$i)) {
$result = FALSE;
}
$i++;
}
return $result;
}
?>

PHP Conditional > how to know what didn't match?

if i have statement:
$a = 1;
$b = 2;
$c = 3;
if($a == 1 && $b == 2 && $c == 3)
{
echo 'correct';
}
else
{
echo 'what variable's weren't matched';
}
Is there any way of knowing what didn't watch instead of writing everything separately?
Cheers!
No. Your expression was turned into a boolean, so apart from checking the equality(s) again you cannot find out which triggered the "false".
You need to test each individually, but you could do something like this:
$a = 1;
$b = 2;
$c = 3;
$a_matched = $a == 1;
$b_matched = $b == 1;
$c_matched = $c == 1;
if($a_matched && $b_matched && $c_matched)
{
echo 'correct';
}
else
{
if (!$a_matched) echo 'a did not match!';
if (!$b_matched) echo 'b did not match!';
if (!$c_matched) echo 'c did not match!';
}
but that's less clear than just:
$a = 1;
$b = 2;
$c = 3;
if($a == 1 && $b == 2 && $c == 3)
{
echo 'correct';
}
else
{
if (!$a == 1) echo 'a did not match!';
if (!$b == 2) echo 'c did not match!';
if (!$c == 3) echo 'b did not match!';
}
Actually, heh, I take back my comment. You can rely on the boolean short-circuiting to set a variable indicating the last part of the conditional which was true:
if (($x = 'a') && $a == 1 && ($x = 'b') && $b == 2 && ($x = 'c') && $c == 3) {
echo "correct\n";
} else {
echo "$x is wrong\n";
}
Note, I would never write this in production code because it's goofy and very hard to understand what's supposed to be going on. But fun to fiddle with, at least.
Nope! That's not possible. You can make life a lot simpler by using arrays, though:
$results = array(1, 2, 4);
$expected = array(1, 2, 3);
$count = count($results);
$wrong = array();
for($i = 0; $i < $count; $i++) {
if($results[$i] !== $expected[$i]) {
$wrong[] = $i;
}
}
if(count($wrong) > 0) {
echo "There were wrong ones. They were at positions: " . implode(', ', $wrong);
} else {
echo "All good!";
}
For example.

Categories