2017-09-18 53 views
3

所以,我有以下功能:PHP - push_to_array功能

function push_to_array() 
{ 
    $array_of_data = func_get_arg(0); 
    for($i = 1; $i < func_num_args(); ++$i){ 

     $array_of_data[] = func_get_arg($i); 
    } 
    return $array_of_data; 
} 

我可以與現有的陣列使用它:$array = ['once','two','three'];

功能用於將數據推到現有陣列。

所以最後通話的樣子:

$newArray = push_to_array($array,'haha','hoho','hihi'); 

現在我希望將電話變成

push_to_array($array,'haha','hoho','hihi');

,所以我不需要創建新的變量或我不想,而是我想修改已經存在的數組;

PS:我知道有功能像array_push但我想自己學習它。

+0

*「我知道有像array_push這樣的函數,但我想自己學習它。」* - 我喜歡這個。祝你的PHP冒險,彼得。:) – salathe

+0

[如何在php中通過引用傳遞無限參數](https://stackoverflow.com/questions/7026872/how-to-pass-unlimited-arguments-by-reference-in-php) – MaxZoom

+0

可能重複你放棄? – AbraCadaver

回答

3

你可以只使用相同的變量:

$array = push_to_array($array,'haha','hoho','hihi'); 

但是,爲了回答這個問題,你將需要使用Passing by Reference,所以你必須把它作爲一個參數:

function push_to_array(&$array_of_data) 
{ 
    for($i = 1; $i < func_num_args(); ++$i){  
     $array_of_data[] = func_get_arg($i); 
    } 
} 

然而,這將達到與第一個例子相同的效果:

$array = array_merge($array,['haha','hoho','hihi']); 
+0

謝謝,我非常感謝你的幫助。 –

0

您應該通過va通過參考可變結構:

function push_to_array(&$array_of_data) 
{ 
    for($i = 1; $i < func_num_args(); ++$i){ 

     $array_of_data[] = func_get_arg($i); 
    } 
    return $array_of_data; 
} 

$array = ['once','two','three']; 

push_to_array($array,'haha','hoho','hihi'); 

print_r($array); 
-2
function self_coded_push_to_array(&$array){ 
     // get all arguments 
     $args = func_get_args(); 
     foreach($args as $i => $arg){ 
     // not the first argument (that's the array) 
     if($i > 0){ 
      // add to the array 
      $array[] = $arg; 
     } 
     } 
    } 


    $arr = array('donkey','monkey'); 

    self_coded_push_to_array($arr, 'zebra', 'whale'); 

    print_r($arr); 

這將返回:

Array (
[0] => donkey, 
[1] => monkey, 
[2] => zebra, 
[3] => whale 
) 
+0

真的很有趣的解決方案,謝謝你來這裏! –

1

如果您使用PHP 5.6或更高版本,可以形成使用省略號可變長度功能:

function push_to_array(array &$a, ...$elems) { 
    foreach ($elems as $elem) { 
     $a[] = $elem; 
    } 
} 
-1

You're wanting to pass the variable as a reference

function my_array_push(&$arr, ...$values) { 
    while (($val = array_pop($values)) !== null) { 
     $arr[] = $val; 
    } 
} 

$t = [1]; 
my_array_push($t, [2, 3, 4]); 
var_dump($t); // [1, 2, 3, 4] 

我沒有看到你並主張之前都知道array_push以下

對於什麼是值得的,在功能,您正嘗試創建的是由the default array_push function提供。

$a = [1]; 

array_push($a, 2, 3, 4); 

var_dump($a); // [1, 2, 3, 4];