2017-01-20 13 views
0

私は、次のデータを持っている:出力データをフィルタリングする方法JSON foreach with php?

$data = ' 
[{"kode":"AX5","harga":"6200","status":"1"}, 
{"kode":"AX10","harga":"11250","status":"1"}, 
{"kode":"AX25","harga":"25750","status":"1"}, 
{"kode":"AX50","harga":"50800","status":"1"}, 
{"kode":"AX100","harga":"100600","status":"1"}, 
{"kode":"B25","harga":"25500","status":"1"}, 
{"kode":"B50","harga":"49800","status":"1"}, 
{"kode":"B100","harga":"99100","status":"1"}, 
{"kode":"B150","harga":"147850","status":"1"}, 
{"kode":"B200","harga":"196600","status":"1"}, 
{"kode":"C5","harga":"4750","status":"2"}, 
{"kode":"C10","harga":"9775","status":"2"}, 
{"kode":"C20","harga":"19850","status":"2"}, 
{"kode":"C50","harga":"50100","status":"2"}, 
{"kode":"C100","harga":"100050","status":"2"}, 
{"kode":"E5","harga":"5100","status":"1"}, 
{"kode":"E10","harga":"10425","status":"1"}, 
{"kode":"E25","harga":"25350","status":"1"}]' 

次のコード・スニペットはkodeからすべての値を返します。

$hasil = json_decode($data); 
foreach ($hasil as $hasilz) { 
    echo $hasilz->kode . PHP_EOL; 
} 

私は、コードをフィルタリングし、以下の値のみ(AXC)を表示します:

AX5 AX10 AX25 AX50 AX100 
C5 C10 C20 C50 C100 

どのボディでもフィルタリングできます$hasilz->kode w ith foreach

+1

何をしたい、私はあなたが出力を目的としているものを意味ですか?現在、あなたの出力は 'AX5 AX10 AX25 AX50 AX100 B25 B50 B100 B150 B200 C5 C10 C20 C50 C100 E5 E10 E25'はあなただけ斧とCをしたいですか? – webDev

+0

はい、AXおよびCのみ –

+0

あなただけのPHPで利用可能な文字列関数を参照する必要がある解決策を確認してください。コメントを見る – webDev

答えて

0

substr()メソッドを使用して、ストリングのパターンとストリングの長さを知っている場合はストリングの内容を確認してください。

foreach ($hasil as $hasilz) { 
    if(substr($hasilz->kode,0,2)=="AX"||substr($hasilz->kode,0,1)=="C"){ 
    echo $hasilz->kode . PHP_EOL; 
    } 
} 

$hasilz->kode[0]=='A' and $hasilz->kode[0]=='C'を使用して、最初の文字を確認することもできます。
またstrstr()を使用することができます - 1は、AX [番号]とC [番号]のためにあるの下に、文字列

+0

私はより多くのデータ「kode」を持って将来的にはそれが唯一の可能なフィルターAX [番号]とC [番号]ですか? –

+0

OKそれでは '使用する場合のsubstr($ hasilz-> kode、0,1)== "A" || SUBSTR($ hasilz-> kode、0,1)== "C" は'最初の文字だけをチェックしますそれは他の文字とは関係ないからです。 – webDev

0

Here is online regex testerの最初の出現を検索します。

foreach(json_decode($data) as $hasilz) 
{ 
    if(preg_match("/^(AX|C)\d+$/",$hasilz->kode)) 
      echo $hasilz->kode . PHP_EOL; 
} 

スクリプト

[[email protected] tmp]$ cat test.php 
<?php 
$data = ' 
[{"kode":"AX5","harga":"6200","status":"1"}, 
{"kode":"AX10","harga":"11250","status":"1"}, 
{"kode":"AX25","harga":"25750","status":"1"}, 
{"kode":"AX50","harga":"50800","status":"1"}, 
{"kode":"AX100","harga":"100600","status":"1"}, 
{"kode":"B25","harga":"25500","status":"1"}, 
{"kode":"B50","harga":"49800","status":"1"}, 
{"kode":"B100","harga":"99100","status":"1"}, 
{"kode":"B150","harga":"147850","status":"1"}, 
{"kode":"B200","harga":"196600","status":"1"}, 
{"kode":"C5","harga":"4750","status":"2"}, 
{"kode":"C10","harga":"9775","status":"2"}, 
{"kode":"C20","harga":"19850","status":"2"}, 
{"kode":"C50","harga":"50100","status":"2"}, 
{"kode":"C100","harga":"100050","status":"2"}, 
{"kode":"E5","harga":"5100","status":"1"}, 
{"kode":"E10","harga":"10425","status":"1"}, 
{"kode":"E25","harga":"25350","status":"1"}, 
{"kode":"CXX25","harga":"25350","status":"1"}]'; 

foreach(json_decode($data) as $hasilz) 
{ 
    if(preg_match("/^(AX|C)\d+$/",$hasilz->kode)) 
      echo $hasilz->kode . PHP_EOL; 
} 
?> 

出力

[[email protected] tmp]$ php test.php 
AX5 
AX10 
AX25 
AX50 
AX100 
C5 
C10 
C20 
C50 
C100 
0

このソリューションは、アカウントにarray_filterを使用して、より機能的なパラダイムをとります。ああPHPは、したがって1つのforeachのが容易に回避されていませんでした、some nativlyをサポートしていません。

<?php 
$data = '[{"kode":"AX5","harga":"6200","status":"1"}, 
{"kode":"AX10","harga":"11250","status":"1"}, 
{"kode":"AX25","harga":"25750","status":"1"}, 
{"kode":"AX50","harga":"50800","status":"1"}, 
{"kode":"AX100","harga":"100600","status":"1"}, 
{"kode":"B25","harga":"25500","status":"1"}, 
{"kode":"B50","harga":"49800","status":"1"}, 
{"kode":"B100","harga":"99100","status":"1"}, 
{"kode":"B150","harga":"147850","status":"1"}, 
{"kode":"B200","harga":"196600","status":"1"}, 
{"kode":"C5","harga":"4750","status":"2"}, 
{"kode":"C10","harga":"9775","status":"2"}, 
{"kode":"C20","harga":"19850","status":"2"}, 
{"kode":"C50","harga":"50100","status":"2"}, 
{"kode":"C100","harga":"100050","status":"2"}, 
{"kode":"E5","harga":"5100","status":"1"}, 
{"kode":"E10","harga":"10425","status":"1"}, 
{"kode":"E25","harga":"25350","status":"1"}]'; 

$data = json_decode($data); 

$wantedKodes = [ 
    'AX', 
    'C', 
]; 

$filtered = array_filter(
    $data, 
    function ($object) use ($wantedKodes) { 
     foreach ($wantedKodes as $kode) { 
      if (strpos($object->kode, $kode) === 0) { 
       return true; 
      } 
     } 

     return false; 
    } 
); 

foreach ($filtered as $item) { 
    echo "{$item->kode} \n"; 
} 

出力は次のようになります。

AX5 
AX10 
AX25 
AX50 
AX100 
C5 
C10 
C20 
C50 
C100 
関連する問題