Home > Backend Development > PHP Tutorial > php判断数组问题

php判断数组问题

WBOY
Release: 2016-06-23 13:49:04
Original
829 people have browsed it

我想在foreach()循环中只显示没有下级的大栏目(例如只显示代码中的大栏目一,大栏目四),有下级栏目的不显示 ,如何判断呢?

cid=栏目ID,name=栏目名称,parent_cid=子栏目的上级栏目ID

{"seller_cat":[
{"cid":"1","name":"大栏目一","parent_cid":"0"},
{"cid":"2","name":"大栏目二","parent_cid":"0"},
{"cid":"3","name":"子栏目二","parent_cid":"2"},
{"cid":"4","name":"子栏目三","parent_cid":"2"},
{"cid":"5","name":"大栏目三","parent_cid":"0"},
{"cid":"6","name":"子栏目一","parent_cid":"5"},
{"cid":"7","name":"大栏目四","parent_cid":"0"}
]}}


回复讨论(解决方案)

$s =<<< TXT{"seller_cat":[{"cid":"1","name":"大栏目一","parent_cid":"0"},{"cid":"2","name":"大栏目二","parent_cid":"0"},{"cid":"3","name":"子栏目二","parent_cid":"2"},{"cid":"4","name":"子栏目三","parent_cid":"2"},{"cid":"5","name":"大栏目三","parent_cid":"0"},{"cid":"6","name":"子栏目一","parent_cid":"5"},{"cid":"7","name":"大栏目四","parent_cid":"0"}]}TXT;$a = json_decode($s);foreach($a->seller_cat as $t) {  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, function($v) use ($t) { return $v->parent_cid == $t->cid;}))    echo $t->name;}
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

$s =<<< TXT{"seller_cat":[{"cid":"1","name":"大栏目一","parent_cid":"0"},{"cid":"2","name":"大栏目二","parent_cid":"0"},{"cid":"3","name":"子栏目二","parent_cid":"2"},{"cid":"4","name":"子栏目三","parent_cid":"2"},{"cid":"5","name":"大栏目三","parent_cid":"0"},{"cid":"6","name":"子栏目一","parent_cid":"5"},{"cid":"7","name":"大栏目四","parent_cid":"0"}]}TXT;$a = json_decode($s);foreach($a->seller_cat as $t) {  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, function($v) use ($t) { return $v->parent_cid == $t->cid;}))    echo $t->name;}
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login



Parse error: syntax error, unexpected T_FUNCTION in D:\aaa\3.php on line 16

版主大大,你的代码出现这个错误啊


$s =<<< TXT{"seller_cat":[{"cid":"1","name":"大栏目一","parent_cid":"0"},{"cid":"2","name":"大栏目二","parent_cid":"0"},{"cid":"3","name":"子栏目二","parent_cid":"2"},{"cid":"4","name":"子栏目三","parent_cid":"2"},{"cid":"5","name":"大栏目三","parent_cid":"0"},{"cid":"6","name":"子栏目一","parent_cid":"5"},{"cid":"7","name":"大栏目四","parent_cid":"0"}]}TXT;$a = json_decode($s);foreach($a->seller_cat as $t) {  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, function($v) use ($t) { return $v->parent_cid == $t->cid;}))    echo $t->name;}
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login



Parse error: syntax error, unexpected T_FUNCTION in D:\aaa\3.php on line 16

版主大大,你的代码出现这个错误啊



我改了下版主的代码

<?php$s ='{"seller_cat":[{"cid":"1","name":"大栏目一","parent_cid":"0"},{"cid":"2","name":"大栏目二","parent_cid":"0"},{"cid":"3","name":"子栏目二","parent_cid":"2"},{"cid":"4","name":"子栏目三","parent_cid":"2"},{"cid":"5","name":"大栏目三","parent_cid":"0"},{"cid":"6","name":"子栏目一","parent_cid":"5"},{"cid":"7","name":"大栏目四","parent_cid":"0"}]}';$a = json_decode($s,true);foreach($a['seller_cat'] as $t) {  if($t['parent_cid'] == 0 && ! array_filter($a['seller_cat'], function($v) use ($t) { return $v['parent_cid'] == $t['cid'];}))    echo $t['name'];}
Copy after login


$s =<<< TXT{"seller_cat":[{"cid":"1","name":"大栏目一","parent_cid":"0"},{"cid":"2","name":"大栏目二","parent_cid":"0"},{"cid":"3","name":"子栏目二","parent_cid":"2"},{"cid":"4","name":"子栏目三","parent_cid":"2"},{"cid":"5","name":"大栏目三","parent_cid":"0"},{"cid":"6","name":"子栏目一","parent_cid":"5"},{"cid":"7","name":"大栏目四","parent_cid":"0"}]}TXT;$a = json_decode($s);foreach($a->seller_cat as $t) {  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, function($v) use ($t) { return $v->parent_cid == $t->cid;}))    echo $t->name;}
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login



Parse error: syntax error, unexpected T_FUNCTION in D:\aaa\3.php on line 16

版主大大,你的代码出现这个错误啊



版主的代码其实没问题哈~可以跑得起。。你也看看我这个吧~~

闭包从 php5.3 开始支持,现在都 php5.6 了
所以我不能保护落后了

对于php < 5.3 可以用create_function创建匿名函数,不过用create_function 与用eval类似,有安全隐患,且性能低。

foreach($a->seller_cat as $t) {   $func = 'return $x->parent_cid == ' . $t->cid . ';';  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, create_function('$x', $func)))    echo $t->name;}
Copy after login

你也可以用类来做。

类方法,可以参考下。

$a = json_decode($s);$ar = array();foreach($a->seller_cat as $t) {  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, array(new T($t->cid), 'filter')))    $ar[] = $t->name;}print_r($ar);class T {        private $cid;        function __construct($cid) {                $this->cid = $cid;        }        function filter($v) {                return $v->parent_cid == $this->cid;        }}
Copy after login
Copy after login

类方法,可以参考下。

$a = json_decode($s);$ar = array();foreach($a->seller_cat as $t) {  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, array(new T($t->cid), 'filter')))    $ar[] = $t->name;}print_r($ar);class T {        private $cid;        function __construct($cid) {                $this->cid = $cid;        }        function filter($v) {                return $v->parent_cid == $this->cid;        }}
Copy after login
Copy after login



版主大人,用你这个方法可以正常使用了,不过我写漏代码了,你能再帮我看看吗?
代码是这样的,前面的seller_cats我写漏了,加上去就用不了你提供的代码

{"seller_cats":{"@attributes":{"list":"true"},"seller_cat":[
{"cid":"1","name":"大栏目一","parent_cid":"0"},
{"cid":"2","name":"大栏目二","parent_cid":"0"},
{"cid":"3","name":"子栏目二","parent_cid":"2"},
{"cid":"4","name":"子栏目三","parent_cid":"2"},
{"cid":"5","name":"大栏目三","parent_cid":"0"},
{"cid":"6","name":"子栏目一","parent_cid":"5"},
{"cid":"7","name":"大栏目四","parent_cid":"0"}
]}}



$s =<<< TXT{"seller_cat":[{"cid":"1","name":"大栏目一","parent_cid":"0"},{"cid":"2","name":"大栏目二","parent_cid":"0"},{"cid":"3","name":"子栏目二","parent_cid":"2"},{"cid":"4","name":"子栏目三","parent_cid":"2"},{"cid":"5","name":"大栏目三","parent_cid":"0"},{"cid":"6","name":"子栏目一","parent_cid":"5"},{"cid":"7","name":"大栏目四","parent_cid":"0"}]}TXT;$a = json_decode($s);foreach($a->seller_cat as $t) {  if($t->parent_cid == 0 && ! array_filter($a->seller_cat, function($v) use ($t) { return $v->parent_cid == $t->cid;}))    echo $t->name;}
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login



Parse error: syntax error, unexpected T_FUNCTION in D:\aaa\3.php on line 16

版主大大,你的代码出现这个错误啊


版主的代码其实没问题哈~可以跑得起。。你也看看我这个吧~~


我的PHP版本太低了,跑不起这个代码呀

为什么用不了? 报什么错误了么? 贴出你的代码看看。

foreach($a->seller_cats->seller_cat as $t) {
  if($t->parent_cid == 0 && ! array_filter($a->seller_cats->seller_cat, array(new T($t->cid), 'filter')))
    $ar[] = $t->name;
}

谢谢jordan102和xuzuning版主大人,问题已经解决了。。。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template