#44485 [Opn]: array_splice behaves unexpectedly when given an object as the last argument
| From: | felipe@php.net | Date: | Thu, 20 Mar 2008 14:02:24 +0000 |
| Subject: | #44485 [Opn]: array_splice behaves unexpectedly when given an object as the last argument | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-617@lists.php.net to get a copy of this message | ||
ID: 44485
Updated by: felipe@php.net
Reported By: computerlov at yahoo dot com
Status: Open
Bug Type: Documentation problem
Operating System: windows xp
PHP Version: 5.2.5
New Comment:
Yes, exactly.
Previous Comments:
------------------------------------------------------------------------
[2008-03-20 13:44:36] computerlov at yahoo dot com
so If i do this
$arr = array($oSomeObject);
array_splice(..., 0, 2, $arr);
will it work as I intended?
I'll check that later.
------------------------------------------------------------------------
[2008-03-20 11:02:39] felipe@php.net
The documentation describe the fourth parameter as array, but the
correct is mixed.
Reclassified as Documentation problem.
------------------------------------------------------------------------
[2008-03-20 10:58:03] felipe@php.net
> I just noticed something you did wrong when reproducing the bug:
> the error is on the array we splice and not the output.
Oh, ok!
> instead of getting an array of 9 objects, you get
> an array of 8 objects and all the data members of
> CSomeClass in the array.
The data of 'replacement' parameter is converted to array, then, the
object is converted to an array of their properties. This is expected.
Thanks.
------------------------------------------------------------------------
[2008-03-19 23:01:16] computerlov at yahoo dot com
I just noticed something you did wrong when reproducing the bug:
the error is on the array we splice and not the output.
for example:
$arrInput = {$obj1, $obj2......}
$arrOutput = array_splice($arrInput, .......);
the problem is in $arrInput (which is passed by reference to
array_splice) and not $arrOutput.
------------------------------------------------------------------------
[2008-03-19 22:54:48] computerlov at yahoo dot com
My complete example is a bit long.
I'm basically creating an array of references to an object like so:
$oEmptyObject = new CObject(NULL);
$nMaxIndex = 64;
for ($nCurIndex = 0; $nCurIndex < $nMaxIndex; ++$nCurIndex)
{
$this -> m_arrDailyObjects[0][$nCurIndex] = &$oEmptyObject;
}
on a different function i attempted to exchange the first two elements
of the given array with one new CObject that actually contained data.
I did it as followed:
// this is an array containing all the objects with no particular
order.
$this -> m_arrObjects[count($this -> m_arrObjects)] = new
CObject($arrFromDatabseData);
// this is an array that saves the objects in a very specific order.
array_splice($this -> m_arrDailyObjects[0], 0, 2, $this ->
m_arrObjects[count($this -> m_arrObjects) - 1]);
this resulted in the unexpected response.
Note: I simplified a my code for a bit by replacing some loops and
variables with literal indexes to keep it understandable without having
to understand all my loops.
CObject is a class with public and private methods, private data
members, and of course a constructor, destructor.
Nothing fancy.
Let me know if you manage to reproduce it.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/44485
--
Edit this bug report at http://bugs.php.net/?id=44485&edit=1