PHP dereference array elements

I have 2 arrays.

$result = array();
$row = array();

Row's elements are all references and is constantly changing. For each iteration of $row I want to copy the values of row into an entry of $result and not the references.

I have found a few solutions but they all seem rather awful.

$result[] = unserialize(serialize($row));
$result[] = array_flip(array_flip($row));

Both of the above work but seem like a lot of unnecessary and ugly code just to copy the contents of an array of references by value, instead of copying the references themselves.

Is there a cleaner way to accomplish this? If not what would the most efficient way be?

Thanks.

EDIT: As suggested below something such as:

function dereference($ref) {
    $dref = array();

    foreach ($ref as $key => $value) {
        $dref[$key] = $value;
    }

    return $dref;
}

$result[] = dereference($row);

Also works but seems equally as ugly.

Answers


Not sure I totally understand the question, but can you use recursion?

function array_copy($source) {
    $arr = array();

    foreach ($source as $element) {
        if (is_array($element)) {
            $arr[] = array_copy($element);
        } else {
            $arr[] = $element;
        }
    }

    return $arr;
}

$result = array();
$row = array(
    array('a', 'b', 'c'),
    array('d', 'e', 'f')
);

$result[] = array_copy($row);

$row[0][1] = 'x';

var_dump($result);
var_dump($row);

Extending the function above like follows solved a problem I had:

function array_copy($source) {
    $arr = array();

    foreach ($source as $element) {
        if (is_array($element)) {
            $arr[] = array_copy($element);
        } elseif (is_object($element)) {
            // make an object copy
            $arr[] = clone $element;
        } else {
            $arr[] = $element;
        }
    }
    return $arr;
}

Need Your Help

AddYear does not work when day value is <10

vb.net

I'm having problems with the following: I have 2 textboxes masked to ShortDate. When I insert a date into the 1st textbox I need the 2nd textbox to display a date 2 years later.

AS#3 loading SWF Multiple

actionscript-3 flash actionscript

Im loading multiple SWF of the same file

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.