ホームページ > バックエンド開発 > PHPチュートリアル > PHPの配列フィルタリングの問題

PHPの配列フィルタリングの問題

WBOY
リリース: 2016-06-23 14:04:41
オリジナル
1531 人が閲覧しました

配列
を仮定します。 array(0 => array('catid' => 10 , 'parent' => '1') , 1 => array('catid' => 11 , 'parent' =>) ; 1) , array('catid' => 21 , 'parent' => 2) ); 親が 2 の値だけを保持したい場合はどうすればよいですか?
私は初心者ですが、助けていただければ幸いです。ありがとうございます。


ディスカッションへの返信 (解決策)
$a = array(0 => array('catid' => 10 , 'parent' => '1') , 1 => array('catid' => 11 , 'parent' => 1) , array('catid' => 21 , 'parent' => 2) );$t = array_map(function($v) { return array('parent' => $v['parent']); }, $a);/*php 5.2.x 写作$t = array_map(create_function('$v', 'return array("parent" => $v["parent"]);'), $a);*/print_r($t);
ログイン後にコピー
Array

(

[0] => 配列

(
) [親] => 1
)

[1] => 配列
(
) [親] => 1


関数 intersect2nd($arr1, $arr2, $key)
{
foreach($arr2) $v として) $tmpArr[] = $v[$key]
foreach( $arr1 as $k=>$v) if(in_array($v[$key], $tmpArr)) $ arr[$k] = $v
return $arr }
$a=array; => array('catid' => 10 , 'parent' => '1') , 1 => ; array('catid' => 11 , 'parent' => 1) , array(' catid' => 21 , 'parent' => 2) ); $b=array(array('parent ' => 2)); // 必要なキーと値を含む同様の配列をコンパイルします。
$c= intersect2nd($a, $b, 'parent');
var_export($c)

私の記憶では、これはモデレータがしつこく口説いているコードです

PHP コード?1234567$a = array(0 => array('catid' => 10 , 'parent' => '1') , 1 => array('catid' => 11 , 'parent ' => 1) , array('catid' => 21 , 'parent' => 2) );$t = array_map(function( $v) { r……
モデレーターさん、よろしくお願いします

でもそれはそうではありません。あまり明確に表現できなかったのかもしれません。parent の値が 2 である配列を保持したい、つまり、この array('catid' => ; 21 , 'parent' => 2) を保持したいのです。 )。

関数 intersect2nd($arr1, $arr2, $key)
{
foreach($arr2 as $v) $tmpArr[] = $v[$key]
foreach($arr1 as $k=>$v) ) if(in_array($v[$key], $tmpArr)) $arr[$k] = $v;
return $arr; }
$a=arra...
解決しました。

私の書き方に準拠していないので、明らかにこれは私のコードではありません

function intersect2nd($arr1, $arr2, $key)
{

foreach($arr2 as $v) $tmpArr[] = $v[ $ key];

foreach($arr1 as $k=>$v) if(in_array($v[$key], $tmpArr)) $arr[$k] = $v;
$a=arra……

コールバック関数が気に入らない場合は、次のように

$a = array(0 => array('catid' => 10 , 'parent' => '1') , 1 => array('catid' => 11 , 'parent' => 1) , array('catid' => 21 , 'parent' => 2) );foreach($a as $r) {  $t[] = array_intersect_key($r, array('parent' => ''));}
ログイン後にコピー
を書くことができます

私の書き方に準拠していないため、明らかにこれは私のコードではありません

snmr_com からの返信を引用2階: function intersect2nd($arr1, $ arr2, $key)

{

foreach($arr2 as $v) $tmpArr[] = $v[$key]
foreach($arr1 as $k=> ;$v) if(in_array($v[$ key], $tmpA...

ふふ、アイデアについて話しています。それをクラスのメソッドに変更して使用しました。今は、修正版

不过不是这样哦,可能我表达的不是很清楚,我是希望保留 parent 的值为2 所在的数组,就是保留这个array('catid' => 21 , 'parent' => 2)。 噢,这样写

$a = array(0 => array('catid' => 10 , 'parent' => '1') , 1 => array('catid' => 11 , 'parent' => 1) , array('catid' => 21 , 'parent' => 2) );$t = array_filter($a, function($v) { return $v['parent'] == 2; });print_r($t);
ログイン後にコピー
Array
(
    [2] => Array
        (
            [catid] => 21
            [parent] => 2
        )

)
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート