0

この配列から0の値を削除するためにこれらの両方の方法を試しましたが、役に立ちませんでした

foreach ($matches as $array_key=>$array_item)
{
  if($matches[$array_key] == 0)
  {
    unset($matches[$array_key]);
  }
}

var_dump ($matches[$array_key]);

この

$matches_without_nulls = array_filter($matches);
print_r($matches_without_nulls[1]);

しかし、私が取得し続ける文字列はこれです

{ [0] => string(7) "2337667" [1] => string(7) "2335765" [2] => string(7) "2332651" [3] => string(7) "2328582" [4] => string(1) "0" [5] => string(1) "0" [6] => string(1) "0" [7] => string(1) "0" }

何が起こっているのかについて何か考えはありますか?

4

6 に答える 6

3

変更してみてください:

if($matches[$array_key] == 0)

if($matches[$array_key] == "0")
于 2013-01-08T12:05:20.550 に答える
3

0配列には(整数)が含まれていません"0"。(文字列)が含まれています。

if($matches[$array_key] == "0")

それでうまくいきます。

PS:なぜ存在しない値を印刷するのです$matches[$array_key]か?設定されていないので、NULL提供されています。でコードをテストしますvar_dump ($matches);


私はこれを試しましたが、うまく機能します:

$matches = array (
        "2337667",
        "2335765",
        "2332651",
        "2328582",
        "0",
        "0",
        "0",
        "0"
    );

foreach ( $matches as $array_key => $array_item ) {
    if( $matches[$array_key] == "0") {
        unset($matches[$array_key]);
    }
}

var_dump ($matches);

//output

array(4) {
    [0]=> string(7) "2337667"
    [1]=> string(7) "2335765"
    [2]=> string(7) "2332651"
    [3]=> string(7) "2328582"
}
于 2013-01-08T12:05:39.617 に答える
3

元のコードは、実際には他の文字列とともにすべてのエントリを削除していました0これには、 array_filter関数を使用することをお勧めします。

array_filter($matches, function($e){return $e!=0;});

コールバックのないarray_filterのみも機能します。なぜそれがうまくいかなかったのか分かりません。

于 2013-01-08T12:07:40.940 に答える
2

array_filter()関数を使用できます。以下のURLをクリックしてください

http://php.net/manual/en/function.array-filter.php

于 2013-01-08T12:06:30.517 に答える
0

キーを使用する代わりに値を比較する

foreach($matches as $array_key=>$array_item)
{
     if( $array_item == 0 ) // if($matches[$array_key] == 0)
     {
          unset($matches[$array_key]);
     }
}
var_dump ($matches);

また

以下のようなものを試すこともできます

foreach($matches as $array_key=>$array_item)
{
     if( !$array_item ) // if $array_item is below, it will get in the loop and excute your code.
     {
          unset($matches[$array_key]);
     }
}
var_dump ($matches);
于 2013-01-08T12:07:57.170 に答える
0

こんにちはみんな私は彼が私が問題を解決するのを手伝ってくれたのでDainisAbolsを信用しました

問題は複数のインデックスでした。これが実用的なソリューションです

foreach($matches[1] as $array_key=>$array_item)
{
  if($matches[1][$array_key] == "0")
  {
    unset($matches[1][$array_key]);
  }
} 
var_dump ($matches[1])

;

于 2013-01-08T12:24:39.597 に答える