Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在函数中返回数组_Php_Arrays_Count_Return - Fatal编程技术网

PHP在函数中返回数组

PHP在函数中返回数组,php,arrays,count,return,Php,Arrays,Count,Return,我是PHP MySqli新手,这是我的第一个项目。 我试图通过将函数放入数组来返回一个值 function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){ global $connection; $sql = "SELECT ".$id." FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND

我是PHP MySqli新手,这是我的第一个项目。 我试图通过将函数放入数组来返回一个值

function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
    global $connection;
    $sql = "SELECT ".$id."  FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";

    if ($result = mysqli_query($connection,$sql)) {
        $count = 0;
        while ($row = mysqli_fetch_array($result)) {
            $count = ++ $count; 
        }
        echo "<br>".$type.": " .  $count;
        $counter[$type] = $count;
        return $counter;      
    }

    $type = 'RIDDOR - Major Injury';
    riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
    var_dump($counter);
函数ridtor\u dates($type、$id、$id1、$datatable、$date\u from、$date\u to){
全球美元连接;
$sql=“从“$datatable.”中选择“$id.”,其中“$id1.”介于“'.$date\U FROM.”和“.$date\U to.”和“$id.=”“$type.”之间;
if($result=mysqli\u查询($connection,$sql)){
$count=0;
while($row=mysqli\u fetch\u数组($result)){
$count=+$count;
}
回声“
”$type.:“$count; $counter[$type]=$count; 返回$count; } $type='RIDDOR-重伤'; ridtor_dates($type、$id、$id1、$datatable、$date_from、$date_to); var_转储(计数器);

该函数工作到一定程度,它将打印结果,该结果实际上是数组的各种计数。但是,我需要在其他位置的表中使用返回值,但var dump只返回NULL。

您的代码应如下所示。您可以在查询中对其进行计数,而不是在php中进行计数

function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
    global $connection; global $counter;
    $sql = "SELECT COUNT(".$id.") as cnt FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";
    $count = 0;
    if($result = mysqli_query($connection,$sql)) {
       if ($row = mysqli_fetch_assoc($result)) {
            $count = $row['cnt']; 
        }  
    }
    $counter[$type] = $count;
}
$type = 'RIDDOR - Major Injury';
riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);

正如上面的所有注释一样-您使用的是
$counter
就像它是全局变量一样-如果是这种情况,您可以在函数开头添加
全局$counter
,否则如果您想使用它作为返回值,您可以将它添加到函数参数中

选项1-使用全局变量

function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
    global $connection;
    global $counter;
    $sql = "SELECT ".$id."  FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";

    if ($result = mysqli_query($connection,$sql)) {
        $count = mysqli_num_rows($result);
        echo "<br>".$type.": " .  $count;
        $counter[$type] = $count;     
    }
}

$type = 'RIDDOR - Major Injury';
riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
    global $connection;
    $sql = "SELECT ".$id."  FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";

    if ($result = mysqli_query($connection,$sql)) {
        $count = mysqli_num_rows($result);
        echo "<br>".$type.": " .  $count;
        return $count;     
    }
}

$type = 'RIDDOR - Major Injury';
$counter[$type] = riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
函数ridtor\u dates($type、$id、$id1、$datatable、$date\u from、$date\u to){
全球美元连接;
全球美元柜台;
$sql=“从“$datatable.”中选择“$id.”,其中“$id1.”介于“'.$date\U FROM.”和“.$date\U to.”和“$id.=”“$type.”之间;
if($result=mysqli\u查询($connection,$sql)){
$count=mysqli\u num\u行($result);
回声“
”$type.:“$count; $counter[$type]=$count; } } $type='RIDDOR-重伤'; ridtor_dates($type、$id、$id1、$datatable、$date_from、$date_to); var_转储(计数器);
选项2-使用返回值

function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
    global $connection;
    global $counter;
    $sql = "SELECT ".$id."  FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";

    if ($result = mysqli_query($connection,$sql)) {
        $count = mysqli_num_rows($result);
        echo "<br>".$type.": " .  $count;
        $counter[$type] = $count;     
    }
}

$type = 'RIDDOR - Major Injury';
riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
    global $connection;
    $sql = "SELECT ".$id."  FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";

    if ($result = mysqli_query($connection,$sql)) {
        $count = mysqli_num_rows($result);
        echo "<br>".$type.": " .  $count;
        return $count;     
    }
}

$type = 'RIDDOR - Major Injury';
$counter[$type] = riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);
函数ridtor\u dates($type、$id、$id1、$datatable、$date\u from、$date\u to){
全球美元连接;
$sql=“从“$datatable.”中选择“$id.”,其中“$id1.”介于“'.$date\U FROM.”和“.$date\U to.”和“$id.=”“$type.”之间;
if($result=mysqli\u查询($connection,$sql)){
$count=mysqli\u num\u行($result);
回声“
”$type.:“$count; 返回$count; } } $type='RIDDOR-重伤'; $counter[$type]=riddor\U dates($type、$id、$id1、$datatable、$date\U from、$date\U to); var_转储(计数器);

我强烈推荐第二个选项以避免使用全局…

您似乎使用了一种昂贵的方法。有一些函数可以轻松获得查询行数

function riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to){
global $connection;
$sql = "SELECT ".$id."  FROM ".$datatable." WHERE ".$id1." BETWEEN '".$date_from."' AND '".$date_to."' AND ".$id." = '".$type."'";
$result = mysqli_query($connection,$sql)

return mysqli_num_rows($result);
}

$type = 'RIDDOR - Major Injury';
$counter = riddor_dates($type,$id,$id1,$datatable,$date_from,$date_to);
var_dump($counter);

您忘记将返回值分配给var,就像
$counter=riddor_dates(…)
您似乎也错过了函数定义中的终止
}
可以通过一个查询完成计数
选择计数()
。或者通过
mysql\u num\u rows
如果您自己也需要数据,我想您可以假设
$counter
在调用之前已经有值(函数只分配数组中的类型)如果出现这种情况,请注意您在每次调用函数时都会覆盖
$counter
,谢谢您的回复,这在我的脑海中是有意义的-虽然我尝试了这两个选项,但它只是停止了页面显示。我以后需要在家里试着找出导致崩溃的错误。因为我只能在现场尝试。欢迎您-如果您遇到任何问题,请告诉我使用全局变量No..hand off!;)我必须同意-我预先提供了第二个选项,但看起来OP原始代码作为计数器的行为是全局的…原始代码作为计数器的行为是全局的。。。在这种情况下,我想OP会有这个值,他们不会问这个问题……:)非常感谢你的帮助。我使用了上面David Winder的“选项2-使用返回值”,它非常适合我想要它做的事情。它确实让我感觉有很长的路要走,但以我目前的知识,它能满足我现在的需要,直到我学到更多。再次感谢您的输入:-)