2016-06-22 7 views
2

私はPHP /プログラミングの新機能で、これがなぜうまくいかないのか知りたいと思います。php関数が配列の値を更新しないのはなぜですか?

私は配列を持っており、その値の1つを関数で変更したいと思います。

私はいくつかのチュートリアルを読んで、それに続いて、可変スコープと関係があると考えていますか?あるいは、これはちょうどこのようなものに近づく方法ではなく、他の方法を使うべきでしょうか?

<?php 
$someArray = array("value1"=> 0, "value2" => 0); 
function test ($a) { 
    if (5 > 4) { 
     $a["value1"] += 1; 
     echo $a["value1"] . "<br/>";    
    } 
} 
test($someArray); 
echo $someArray["value1"]; 
?> 

私は何を得ることはありません、私は関数の内部エコーとき、それは「VALUE1」の新しい値を取得するために働く理由ですが、それは動作しません外。私は本当に助言/指導に感謝し、これがちょうどあまりにも愚かまたは間違っている場合はごめんなさい。

答えて

2

再び$someArrayにその配列を受け取ります。アドレスを使用して配列を渡すと、配列内で行われた変更が反映されます。 &(参照として渡す)を使用してください:(hereからフェッチ)

explanation

あまりにもこのSO questionを読む:

$someArray = array("value1"=> 0, "value2" => 0); 
function test (&$a) { //Use & here 
      ^
    if (5 > 4) { 
     $a["value1"] += 1; 
     echo $a["value1"] . "<br/>";    
    } 
} 
test($someArray); 
echo $someArray["value1"]; 

ここで説明があります。


他の方法は、関数から値を返すことです。関数内でリターンを使用し、外部のそれをキャプチャ:

$someArray = array("value1"=> 0, "value2" => 0); 
function test ($a) { 
    if (5 > 4) { 
     $a["value1"] += 1; 
     echo $a["value1"] . "<br/>";    
    } 
    return $a; //Return here 
} 
$someArray = test($someArray); //Capture here 
echo $someArray["value1"]; 
1

試してみてください。

1)機能

2からのリターン更新配列$a)あなたは、配列のコピーとして渡している

$someArray = array("value1"=> 0, "value2" => 0); 
function test ($a) { 
    if (5 > 4) { 
     $a["value1"] += 1; 
    } 
    return $a; 
} 
$someArray = test($someArray); 
echo "Updated ".$someArray["value1"]; 
0

あなたの関数がものをエコーが、変更したり、値を返しません。あなたが達成したいのは、値を変更/変更することです。そのため、関数内でechoの代わりにこの値を返し、その値がエコーアウトするように変数を設定することができます。以下に、あなたはどのようにすべきかを見つけることができます。

<?php 
$someArray = array("value1"=> 0, "value2" => 0); 
function test ($a) { 
    if (5 > 4) { 
     $a["value1"] += 1; 
     return $a["value1"] . "<br/> YEY we did it";    
    } 
} 
echo test($someArray); 
?> 

、参照によりsandbox

0

使用パスで、ここでそれを確認

test(&$someArray); 
関連する問題