96747


経緯  
下記コードを試したら、結果がint(0)になりました。

[code]

    <?php
    $resultStr ='';
    foreach($hogeAry as $key => $val):
      $resultStr += $val;
    endforeach;
    var_dump($resultStr); //int(0)
    
[/code]

対応  
「+=」を「.=」へ変更したら、期待通り動作するようになりました。

* * *

Q1.AIへ質問したら下記回答だったのですが、下記内容は合っていますか？

>
> PHPにおいて、+=演算子は、数値の加算を行う演算子です。しかし、$resultStrは文字列型で初期化されています。PHPは、文字列に対して数値の演算を行う際、文字列を数値に変換します。この場合、$val内の値である文字列を数値に変換しようとすると、数値に変換できないため、PHPはそれを0として解釈します。

Q2.「+=演算子は数値の加算を行う演算子」という仕様は、どこに書いてありますか？  
[代入演算子](https://www.php.net/manual/ja/language.operators.assignment.php)


CC BY-SA 4.0
2023-11-10T15:45:47.800
96742
2023-11-10T16:41:44.440
7886
question
php
PHPで文字列の場合、+=演算子は使用できないようですが、その仕様はどこに書いてありますか？


参照している
[代入演算子](https://www.php.net/manual/ja/language.operators.assignment.php)
で、それぞれ "同一の結果になる操作" を見れば自明な気がします。

例 | 同一の結果になる操作 | 演算  
---|---|---  
$a += $b | $a = $a + $b | 加算  
$a .= $b | $a = $a . $b | 文字列の結合  
  
より詳細な情報は、同じページの右側にあるインデックスから
[算術演算子](https://www.php.net/manual/ja/language.operators.arithmetic.php) 、
[文字列演算子](https://www.php.net/manual/ja/language.operators.string.php)
をそれぞれ参照してください。

> ### 文字列演算子
>
> 文字列の演算子は 2 種類あります。最初のは結合演算子(`.`)で、右引数と 左引数を結合したものを返します。2 番目は、結合代入演算子(`.=`)で、
> この演算子は右側の引数に左側の引数を追加します。


CC BY-SA 4.0
2023-11-10T16:04:53.373
96745
2023-11-10T16:04:53.373
3060
96742
answer


A1.AIの回答の根拠となるであろう記事はこちらのページでしょう。

[PHP マニュアル > 言語リファレンス > 型 >
型の相互変換](https://www.php.net/manual/ja/language.types.type-juggling.php)

> コンテクスト(文脈)によっては、 PHP が値を別の型に自動変換しようとすることがあります。
> 自動変換が行われる異なるコンテクストが存在するのは、以下のとおりです:

> 数値のコンテクスト  
>  これは、 **算術演算子** を使った場合です。  
>  このコンテクストでは、 オペランドのどちらかが float (または整数と解釈できない場合) の場合か、 両方のオペランドが float の場合、
> 結果の型は float になります。 **そうでない場合、オペランドは整数として解釈され、 結果の型も整数になります。**

太字は回答者による引用の強調

A2.
cubickさんの回答や別の質問に私が回答したのと同じですが、説明箇所には[算術代入演算子](https://www.php.net/manual/ja/language.operators.assignment.php#language.operators.assignment.arithmetic)
と書かれており、「算術」用途であると明確化されているのが根拠になるのでは？


CC BY-SA 4.0
2023-11-10T16:41:44.440
96747
2023-11-10T16:41:44.440
26370
96742
answer