首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用php过滤JSON foreach输出数据?

如何用php过滤JSON foreach输出数据?
EN

Stack Overflow用户
提问于 2017-01-21 00:46:00
回答 3查看 315关注 0票数 0

我有以下数据:

代码语言:javascript
复制
$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中的所有值

代码语言:javascript
复制
$hasil = json_decode($data);
foreach ($hasil as $hasilz) {
    echo $hasilz->kode . PHP_EOL;
}

我想过滤代码,只显示下列值(AXC):

代码语言:javascript
复制
AX5 AX10 AX25 AX50 AX100 
C5 C10 C20 C50 C100

有没有人可以帮我用foreach过滤$hasilz->kode

EN

回答 3

Stack Overflow用户

发布于 2017-01-21 00:54:59

这里,如果您知道字符串的模式和长度,可以使用substr()方法检查字符串的内容。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-01-24 22:07:29

Here is online regex tester,下面的一个用于AXnumber和Cnumber。

代码语言:javascript
复制
foreach(json_decode($data) as $hasilz) 
{
    if(preg_match("/^(AX|C)\d+$/",$hasilz->kode)) 
            echo $hasilz->kode . PHP_EOL;
}

脚本

代码语言:javascript
复制
[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;
}
?>

输出

代码语言:javascript
复制
[akshay@gold tmp]$ php test.php
AX5
AX10
AX25
AX50
AX100
C5
C10
C20
C50
C100
票数 0
EN

Stack Overflow用户

发布于 2017-01-24 23:01:09

此解决方案考虑了使用array_filter的功能更强的范例。可惜php本身并不支持some,因此一个foreach是不能轻易避免的。

代码语言:javascript
复制
<?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";
}

输出将为:

代码语言:javascript
复制
AX5 
AX10 
AX25 
AX50 
AX100 
C5 
C10 
C20 
C50 
C100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41768547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档