ID:               25489
 Updated by:       [EMAIL PROTECTED]
 Reported By:      postings-php-bug at hans-spath dot de
-Status:           Open
+Status:           Closed
 Bug Type:         Documentation problem
 Operating System: Irrelevant
 PHP Version:      4.3.6
 New Comment:

This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation
better.

I changed "The following equivalences hold" to "The following
statements change the values of $input the same way"


Previous Comments:
------------------------------------------------------------------------

[2004-07-05 18:04:49] postings-php-bug at hans-spath dot de

"... they behave exactly as the original functions"

(  ( (( BULLSHIT ALARM )) )  )

THEY DO NOT.



TEST VALUES:

|| $input = array(
||    '1st' => 'first element',
||    2     => 'second element',
||    '3rd' => 'third element'
|| );
|| $x = 2;
|| $y = 'replaced element';



*** array_push($input, $x, $y)
*** vs.
*** array_splice($input, count($input), 0, array($x, $y))

<TEST> array_push($input, $x, $y)
$input => array (
  '1st' => 'first element',
  2 => 'second element',
  '3rd' => 'third element',
  3 => 2,
  4 => 'replaced element',
)

<TEST> array_splice($input, count($input), 0, array($x, $y))
$input => array (
  '1st' => 'first element',
  0 => 'second element',
  '3rd' => 'third element',
  1 => 2,
  2 => 'replaced element',
)

--- EQUAL / EQUIVALENT ?!?
- differing return value (irrelevant)
- renumbered array-keys



*** array_pop($input)
*** vs.
*** array_splice($input, -1)

<TEST> 
$z => 'third element'
$input => array (
  '1st' => 'first element',
  2 => 'second element',
)

<TEST> array_splice($input, -1)
$z => array (
  '3rd' => 'third element',
)
$input => array (
  '1st' => 'first element',
  0 => 'second element',
)

--- EQUAL / EQUIVALENT ?!?
- return value differs (plain value vs. single-element array)
- renumbered array-keys



*** array_shift($input)
*** vs.
*** array_splice($input, 0, 1)

<TEST> array_shift($input)
$z => 'first element'
$input => array (
  0 => 'second element',
  '3rd' => 'third element',
)

<TEST> array_splice($input, 0, 1)
$z => array (
  '1st' => 'first element',
)
$input => array (
  0 => 'second element',
  '3rd' => 'third element',
)

--- EQUAL / EQUIVALENT ?!?
- return value differs (plain value vs. single-element array)



*** $a[$x] = $y
*** vs.
*** array_splice($input, $x, 1, $y)

<TEST> $input[$x] = $y
$z => 'replaced element'
$input => array (
  '1st' => 'first element',
  2 => 'replaced element',
  '3rd' => 'third element',
)

<TEST> array_splice($input, $x, 1, $y)
$z => array (
  '3rd' => 'third element',
)
$input => array (
  '1st' => 'first element',
  0 => 'second element',
  1 => 'replaced element',
)

--- EQUAL / EQUIVALENT ?!?
- return value differs (new value vs. replaced value) (irrelevant)
- what the hell is $a?
- OVERWRITE OF WRONG ELEMENT (because $x is a positon for array_splice,
not a key)
- renumbered array-keys

------------------------------------------------------------------------

[2004-07-05 12:30:27] [EMAIL PROTECTED]

Uhm.. They say equivalents, not equal. However, when that equivalents
are used in a separate line, they behave exactly as the original
functions.

------------------------------------------------------------------------

[2003-09-11 10:16:45] postings-php-bug at hans-spath dot de

The last 2 tests in my example code do not show the problem, to fix
this, replace '$a[$x] = $y' by '$input[$x] = $y' and add var_dump(
$input ); after var_dump( $z );.

------------------------------------------------------------------------

[2003-09-11 07:55:53] postings-php-bug at hans-spath dot de

Description:
------------
The documentation for array_splice gives some "equivalents" for special
cases in Table 1.

These are WRONG.

array_pop and array_shift return single *VALUES*, array_splice returns
an array.
array_pop and array_shift do NOT perform the same action.
In "$a[$x] = $y", $x is a KEY.
In array_splice($input, $x, 1, $y), $x is a POSITION.

Reproduce code:
---------------
D:\PHP>cat test\array_splice.php
<?
$tests = array(
        'array_shift($input)',
        'array_pop($input)',
        'array_splice($input, -1)',
        '$a[$x] = $y',
        'array_splice($input, $x, 1, $y)'
);

foreach( $tests as $test )
{
        $input = array(
                '1st' => 'first element',
                2     => 'second element',
                '3rd' => 'third element'
        );
        $x = 2;
        $y = 'replaced element';

        echo "\n$test\n";
        eval( "\$z = $test ;" );
        var_dump( $z );
}

Expected result:
----------------
*I* expect it to work as it works, but people misled by the
documentation could expect something else.

Actual result:
--------------
D:\PHP>4.3.3\php-cli.exe -n test\array_splice.php

array_shift($input)
string(13) "first element"

array_pop($input)
string(13) "third element"

array_splice($input, -1)
array(1) {
  ["3rd"]=>
  string(13) "third element"
}

$a[$x] = $y
string(16) "replaced element"

array_splice($input, $x, 1, $y)
array(1) {
  ["3rd"]=>
  string(13) "third element"
}


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=25489&edit=1

Reply via email to