Hola
kodeone, lo que sucede es que al pasar una variable por parámetro, por defecto/default, se pasa solo su valor y se usa como si fuera una variable nueva, es decir, se edita ese valor pasado como argumento pero solo dentro de la función y no altera el que tenga fuera de ella.
un ejemplo usando tu código y mostrándolo de la siguiente manera devolvería:
$n = 10;
// mostrando el contenido del vector original
echo '<pre>',print_r($vector),'</pre>';
// mostrando el resultado luego de agregar el nuevo elemento
echo '<pre>',añadir_p($vector,$n),'</pre>';
// mostrando el contenido del vector original al culminar el proceso
echo '<pre>',print_r($vector),'</pre>';
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
[5] => 7
[6] => 7
)
Array
(
[0] => 10
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 7
)
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
[5] => 7
[6] => 7
)
PHP nos permite a partir de la versión 4 la posibilidad de pasar
variables por referencia, de manera que la variable pasada como argumento al ser modificada se reflejara en el resultado aun estando fuera de la función.
Para indicar que pasas la variable por referencia solo debes anteponer el carácter ampersand (
&) a la variable que desees, ejemplo:
$vector = array(2,3,4,5,6,7,7);
function añadir_p(&$vector,$n){
$total = count($vector);
for ($i=$total;$i >= 0;$i--)
$vector[$i]=$vector[$i-1];
$vector[0]=$n;
return print_r($vector);
}
$n = 10;
// mostrando el contenido del vector original
echo '<pre>',print_r($vector),'</pre>';
// mostrando el resultado luego de agregar el nuevo elemento
echo '<pre>',añadir_p($vector,$n),'</pre>';
// mostrando el contenido del vector original al culminar el proceso
echo '<pre>',print_r($vector),'</pre>';
Devolverá:
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
[5] => 7
[6] => 7
)
Array
(
[0] => 10
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 7
)
Array
(
[0] => 10
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 7
)