【问题标题】:How to filter output data JSON foreach with php?如何使用 php 过滤输出数据 JSON foreach?
【发布时间】:2017-06-05 17:33:18
【问题描述】:

我有以下数据:

$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"}]'

以下代码-sn-p 返回来自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->kodeforeach 吗?

【问题讨论】:

  • 你想要什么,我的意思是你想要输出什么?目前你的输出是AX5 AX10 AX25 AX50 AX100 B25 B50 B100 B150 B200 C5 C10 C20 C50 C100 E5 E10 E25你只想要Ax和C吗?
  • 是的,仅限 AX 和 C
  • 查看解决方案只需要查看php中可用的字符串函数。
  • 看cmets,问题更清楚了,添加到问题中以明确OP的预期结果是什么。

标签: php json loops filtering


【解决方案1】:

这里,如果你知道字符串的模式和字符串的长度,使用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()——查找第一次出现的字符串

【讨论】:

  • 将来我有更多数据 'kode' 此代码将显示数据 'kode' AXX 或 AXB 或 CAB 或 CB 是否可能仅过滤 AX[number] 和 C[number] ?跨度>
  • ok 如果是这样,那么使用substr($hasilz->kode,0,1)=="A"||substr($hasilz->kode,0,1)=="C" 只检查第一个字符,因为它与其他字符无关。
【解决方案2】:

Here is online regex tester,下面一个是 AX[number] 和 C[number]。

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

脚本

[akshay@gold 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;
}
?>

输出

[akshay@gold tmp]$ php test.php
AX5
AX10
AX25
AX50
AX100
C5
C10
C20
C50
C100

【讨论】:

    【解决方案3】:

    此解决方案考虑到使用array_filter 的功能更强大的范例。唉 php 不支持 some nativly,因此无法轻松避免一个 foreach。

    <?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
    

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2020-12-15
      • 1970-01-01
      相关资源
      最近更新 更多