ホームページ >バックエンド開発 >PHPチュートリアル >PHPの配列フィルタリングの問題
配列
を仮定します。 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
(
) [親] => 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($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' => ''));}を書くことができます
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