ホームページ  >  記事  >  バックエンド開発  >  PHPは配列の問題を判断します

PHPは配列の問題を判断します

WBOY
WBOYオリジナル
2016-06-23 13:49:04774ブラウズ

foreach() ループ内で従属列を持たない大きな列だけを表示したい(例えば、コードでは大きな列 1 と大きな列 4 だけを表示する)し、従属列のある列は表示しないようにしたい。

cid=列ID、name=列名、parent_cid=サブ列の上位列ID

{"seller_cat":[
{"cid":"1","name":"Big Column One","parent_cid ":"0"},
{"cid":"2","name":"大きな列 2","parent_cid":"0"},
{"cid":"3","name": "サブ列 2","parent_cid":"2"},
{"cid":"4","name":"サブ列 3","parent_cid":"2"},
{"cid ": "5","name":"大きな列 3","parent_cid":"0"},
{"cid":"6","name":"サブ列 1","parent_cid":" 5" },
{"cid":"7","name":"Big Column Four","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;}

$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;}



解析エラー: 構文エラー、D:aaa3.php の 16 行目に予期しない T_FUNCTION があります

モデレーター様、このエラーはコードに表示されます


$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;}



解析エラー: 構文エラー、D:aaa3.php の 16 行目に予期しない T_FUNCTION があります

モデレーター様、このエラーがコードに表示されます


モデレーターのコードを変更しました

<?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'];}


$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;}



解析エラー: 構文エラー、 D:aaa3.php の 16 行目に予期しない T_FUNCTION があります

モデレータ様、このエラーがあなたのコードに表示されます


モデレータのコードは実際には問題ありません~うまく実行できます。 。こちらもご覧ください~~

クロージャは php5.3 からサポートされており、現在はすべて php5.6 です
したがって、後方性を保護することはできません

php rreee
クラスでもできます。

クラスメソッドは以下を参照してください。

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;}

クラスメソッド、参照できます。

$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;        }}



モデレータさん、あなたのメソッドは普通に使えますが、コードを見逃してしまいました。見てもらえますか?
前の部分でseller_catsを見逃してしまったので、追加すると、あなたが提供したコードは使用できなくなります。

{"seller_cats":{"@attributes":{"list":" true"},"seller_cat": [
{"cid":"1","name":"大きな列 1","parent_cid":"0"},
{"cid":"2","name ":"大きな列 2", "parent_cid":"0"},
{"cid":"3","name":"サブ列 2","parent_cid":"2"},
{" cid":"4","name ":"サブ列 3","parent_cid":"2"},
{"cid":"5","name":"大きな列 3","parent_cid": "0"},
{"cid ":"6","name":"サブ列 1","parent_cid":"5"},
{"cid":"7","name":"Large列 4","parent_cid":" 0"}
]}}



$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;        }}



解析エラー: 構文エラー、D:aaa3.php の 16 行目に予期しない T_FUNCTION があります

モデレータ、これコードにエラーが表示されました


モデレーターのコードは実際には問題なく、実行できます。 。こちらも見てみてください~~


私の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 モデレーター、ありがとう、問題は解決しました。 。 。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。