简体   繁体   中英

PHP - Return reference

I m trying to create a function which will take an array and create columns and values but I don't know how to return references with functions. Any help is appreciated.

private function data($data) {

    $columns = "";
    $values = array();

    foreach ($data as $column => $value) {
        $columns .= ($columns == '') ? '' : ', ';
        $columns .= $column;
        $values[$column] = &$data[$column];
    }

    return array($columns, $values);

}

This is the function which inserts data in the database.

/**
* Insert item into items table.
*
* @param (array) $data - Column => value array created in item class.
*/
public function insertItem($data) {

    $columns = "";
    $values = array();

    $prep = "isiisiisiiis";

    /*foreach ($data as $column => $value) {
        $columns .= ($columns == '') ? '' : ', ';
        $columns .= $column;
        $values[$column] = &$data[$column];
    }*/

    $theData = $this->data($data);

    $a = str_repeat('?, ', count($data) );
    $b = substr_replace($a, '', -2);

    $q = $this->db->mysqli->prepare("INSERT INTO items ($columns) VALUES ($b)");

    call_user_func_array( array($q, 'bind_param'), array_merge(array($prep), $values) );
    $q->execute();
    $q->close();

    //return id
    return $this->db->mysqli->insert_id;

}

Edit ** Working code:

private function data(&$data) {

    $columns = "";
    $values = array();

    foreach ($data as $column => $value) {
        $columns .= ($columns == '') ? '' : ', ';
        $columns .= $column;
        $values[$column] = &$data[$column];
    }

    return array($columns, $values);

}

And accessing it like this:

$theData = $this->data($data);
$theData[0]; //$columns
$theData[1]; //$values

try this: add & in function param and remove the & inside the foreach loop.

private function data (&$data)
{

    $columns = "";
    $values = array ();

    foreach ($data as $column => $value)
    {
        $columns .= ($columns == '') ? '' : ', ';
        $columns .= $column;
        $values[$column] = $data[$column];
    }

    return array ($columns, $values);
}

inside public function insertItem remove $theData =

public function insertItem ($data)
{
    [..]
    $this->data ($data);
}
private function data(&$data) {

    $columns = "";
    $values = array();

    foreach ($data as $column => $value) {
        $columns .= ($columns == '') ? '' : ', ';
        $columns .= $column;
        $values[$column] = &$data[$column];
    }

    return array($columns, $values);

}


$theData = $this->data($data);
$theData[0]; //$columns
$theData[1]; //$values

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM