2017-12-21 17 views
0
$lts = mysqli_fetch_all($con->query($query), MYSQLI_NUM); 
for($i=0; $i<count($lts); $i++){ 
    for($j=0; $j<count($lts[$i]); $j++){ 
     $lts[$i]=$lts[$i][$j]; 
    } 
} 

は$ LTSはのvar_dumpです:PHP 7.2のカウント()警告

array (size=2) 
    0 => string '20' (length=2) 
    1 => string '21' (length=2) 

が私にこの警告を与えている

パラメータは、配列または可算

を実装するオブジェクトでなければなりません

これは、PHP7.1から7.2へのアップグレード時に発生しました。どのようにそれを修正するための任意のアイデア?

+2

は、あなたがそれに入れているかを確認し、実際には配列です;)(mysqli_fetch_all 'のリターン)'何かが含まれていますが、その – IncredibleHat

+2

チェック - なしにnullかもしれません行。 –

+5

.. check release notes ... 7.2でこの警告を追加しましたhttp://php.net/manual/en/migration72.incompatible.php "カウントできない型をcount()しようとするとE_WARNINGが送出されるようになりました(これにはsizeof()エイリアス関数が含まれます)。 – DDeMartini

答えて

1

問題は、内側のループを初めては$lts[$i]$lts[$i][$j]に置き換えることです。ループが繰り返されると、$j < count($lts[$i])がテストされます。しかし、$lts[$i]はもはや配列の最初の列の値なので、このエラーが発生します。

これは、ループの前に変数count($lts[$i])を割り当てることで解決できます。しかしそれは別の問題を引き起こします。後続の反復で$lts[$i] = $lts[$i][$j]を実行しようとすると、$lts[$i]はまだ配列ではないので、$j要素はありません。

forの代わりにforeachを使用すると、ループする配列のコピーが作成されるため、これを解決できます。

for($i=0; $i<count($lts); $i++){ 
    foreach ($lts[$i] as $col) 
     $lts[$i] = $col; 
    } 
} 

しかし、内側のループのポイントが何であるかはわかりません。各反復では、$lts[$i]が次の列で上書きされるため、最終結果は最後の列になります。あなたは内側のループなしでそれを行うことができます。

foreach ($lts as &$row) { 
    $row = end($row); 
} 

または単に:

$lts = array_map('end', $lts); 
+0

パーフェクト。ありがとう! –