php函数返回foreach循环后的最后一行

时间:2014-09-17 13:02:53

标签: php arrays function

以下函数仅返回数组的最后一行:

function myFunc () {

            $sql = mySql(); 
            $stid = oci_parse(getConnect(),$sql);

// runs the query above                   
oci_execute($stid);

if (oci_execute($stid)) {
            while ($row =oci_fetch_array($stid,OCI_ASSOC+OCI_RETURN_NULLS)) {
                   $out1 = "";
                   foreach($row as $column =>$entry)
                           $out1 .= $entry;
                   $output = $out1;         
                   //var_dump($output); - here I can see all array elements                                                               
                                                                            }   
 return($output);
}                       
else return "No Oracle connection";
}

var_dump()显示所有数组元素,但该函数仅显示数组的最后一行。这是因为功能的回归吗?我是否必须返回一个数组来获取所有数组元素?如何将所有数组元素放在一个字符串中?

3 个答案:

答案 0 :(得分:5)

在每次循环迭代中覆盖$output。您需要将这些值存储在一个数组中(或根据您最终想要的内容将它们附加):

$output = array();
while ($row = oci_fetch_array($stid,OCI_ASSOC+OCI_RETURN_NULLS)) {
    $out1 = "";
    foreach($row as $column =>$entry) {
        $out1 .= $entry;                                                          
    }   
    $output[] = $out1; 
}         
return($output);

这个功能有点令人费解,我很确定这可以大大简化,从查询开始。

答案 1 :(得分:0)

我完全赞同约翰。

然而,他比我快。

但这是我的:

function myFunc() {
    $sql    = mySql(); 
    $stid   = oci_parse(getConnect(), $sql);

    // runs the query above                   
    $result = oci_execute($stid);

    if ($result) {
       $arr = array();
       while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
            foreach($row as $column => $entry) {
                $arr[] = $entry;
            }                                                        
        } 
        $output = $arr; // you can simply go return($arr) but I've left it like this for debugging if you need
        return($output);
    } else {
        return "No Oracle connection: " . $result;
    }
}

我已经完成的是添加了oci_execute()的$ result,以便在连接中断时为您提供调试的机会。我还将附加的字符串转换为数组。

希望它有所帮助。

答案 2 :(得分:0)

我会使用这两种中的一种,具体取决于您希望如何格式化返回的数组。

function myFunc () {
    $sql = mySql(); 
    $stid = oci_parse(getConnect(),$sql);             
    oci_execute($stid);
    $output = array();
    if (oci_execute($stid)) {
        for( $i = 0; $r = oci_fetch_array( $stid, OCI_ASSOC+OCI_RETURN_NULLS ) ){
            $output[$i] = $r;
        }
    }   
    return $output;
}            

//这会将整个结果数组放在一个数组中。如果结果包含多行将导致多个数组结果。

function myFunc () {
    $sql = mySql(); 
    $stid = oci_parse(getConnect(),$sql);             
    oci_execute($stid);
    $output = array();
    if (oci_execute($stid)) {
        while( $row = oci_fetch_array( $stid, OCI_ASSOC+OCI_RETURN_NULLS ) ){
            foreach( $row AS $key => $val ){
                $output[] = $val;
            }
        }
    }   
    return $output;
} 

//这会将每个值作为数组对象放在$ output数组