ホームページ  >  記事  >  バックエンド開発  >  長い間これをやっていなかった

長い間これをやっていなかった

WBOY
WBOYオリジナル
2016-06-23 14:26:20854ブラウズ

分散していますか?

データベースから読み取られたデータのほとんどは、整然とした行と列を含む 2 次元配列です。
読み取った後、PHP を使用して計算すると、多くの垂直方向の計算が必要になります。多くの人は $array[record][field] に慣れていると思います。実際、配列の 1 次元キーと 2 次元キーをどのように割り当てるかを考える必要があります

たとえば、API から取得した行列配列の形式は固定されていますが、多くの人がレコードをたどって 2 次元の値を見つけたり、再帰を使用したりするのはとても面倒そうです。行と列を交換して計算します

squareArray.php

<?phpclass squareArray{	public function swapRowCol($inArr)	{		$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);		foreach($inArr as $key => $value) { $temArr = new ArrayIterator($value); $mit->attachIterator($temArr, $key); }		$arr = array();		foreach($mit as $item) array_push($arr,$item);		if (isset($inArr[0])) $arr = array_combine(array_keys($inArr[0]),$arr);		return $arr;	}	public function swapRowColWithKey($inArr)	{		foreach($inArr as $k1=>$v1) foreach($v1 as $k2=>$v2) $arr[$k2][$k1] = $v2;		return $arr;	}	public function intersect1st($arr1, $arr2, $key)	{		$arr[$key] = array_intersect($arr1[$key], $arr2[$key]);//match source's $key with target 		foreach($arr1 as $k=>$v) { if ($k == $key) continue; $arr[$k] = array_intersect_key($v, $arr[$key]); }		return $arr;	}	public 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;		return $arr;	}}?>


squareArray.sample .php
これはその使用方法です。これを使用したことがない場合に備えて、書き方を思い出してもらうために簡単に書いています。

バグを見つけたら、自分で対処してください...


ディスカッションに返信 (解決策)

共有してくれてありがとう

ネストの書き方を学びましょう。配列の反復?

ネストされた配列の反復を記述する方法は?

それは私が考えていることではありません。あなたも貢献できます


ネストされた配列はどのようなものですか?
キーを考慮しない swapRowCol メソッドは、キーを考慮する swapRowColWithKey メソッドよりも複雑なのはなぜですか?

私はこれをよく使います

<?phpinclude('squareArray.php');//$array = array('id' => array('001', '002', '003'),'name' => array('张三', '李四', '王五'),'age' => array(22, 23, 11));  $array = array(array('id' => '001', 'name' => '张三', 'age' => 22),array('id' => '002', 'name' => '李四', 'age' => 23),array('id' => '003', 'name' => '王五', 'age' => 11));  $a = array(  0 => array('action_id' => 3),  1 => array('action_id' => 2),  2 => array('action_id' => 1),  3 => array('action_id' => 7),  4 => array('action_id' => 11),);$b = array(  0 => array('action_id' => 3, 'type' => 0, 'order_num' => 67),  1 => array('action_id' => 2, 'type' => 0, 'order_num' => 66),  2 => array('action_id' => 1, 'type' => 0, 'order_num' => 65),  3 => array('action_id' => 7, 'type' => 0, 'order_num' => 64),  8 => array('action_id' => 14, 'type' => 0, 'order_num' => 40),  13 => array('action_id' => 11, 'type' => 0, 'order_num' => 30),);//交换矩阵数组一维和二维键值例子$obj=new squareArray();$arr=$obj->swapRowCol($array);var_export($arr);//交换矩阵数组一维和二维键值例子(保留数值键名)$arr=$obj->swapRowColWithKey($b);var_export($arr);//根据指定key求二维数组矩阵数组交集(一维key)$key='action_id';$aa=$obj->swapRowCol($a);$bb=$obj->swapRowCol($b);$arr = $obj->intersect1st($bb, $aa, $key);//$b和$a自己定义吧,我懒得输入了$arr=$obj->swapRowCol($arr);var_export($arr);//根据指定key求二维数组矩阵数组交集(二维key)$key='action_id';$arr = $obj->intersect2nd($b, $a, $key);//$b和$a自己定义吧,我懒得输入了var_export($arr);exit;?>


ネストされた配列とはどのようなものですか?
キーを考慮しない swapRowCol メソッドは、キーを考慮する swapRowColWithKey メソッドよりも複雑なのはなぜですか?

私はこれをよく使います

		    public function swapRowCol($inArr)		    {		        return call_user_func_array('array_merge_recursive', $inArr);		    }


はは、出力が正しければ、もちろん上手です
ちなみに、私は SPL の書き方を練習していましたが、基本的に swapRowCol() を使用したことはなく、常に swapRowColWithKey() を使用していました。ので、二度と使用することはありませんでした。

ネストされた配列とはどのようなものですか?
入れ子配列を正しく理解すると、配列内に入れ子配列 (セル配列?入れ子配列?) が存在することになります。



入れ子配列とはどのようなものですか。のように?

ネストされた形状を正しく理解すると、配列内にネストされた配列 (セル配列?ネストされた配列?) が存在することを意味します。詳細には、次元が 2 次元を超えています


では、キーが考慮されていない場合は、それは考慮されていません。 #5 のメソッドを使用するのが適切です

私は 1 年間 php を使ってきましたが、このオブジェクトを初めて目にしました
$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);

なんという変化でしょう...


学んだ、マークする

収集+学習。

共有してくれてありがとう

とても良いです。まずは集めてください

とても混んでいます。改行、中括弧。

とても混んでいます。改行、中括弧。

モニターは 1920 ピクセルなので、改行がさらに混雑します

ぜひ学びに来てください

私は 1 年間 php を使ってきましたが、このオブジェクトを見たのは初めてです

$mit = new MultipleIterator(MultipleIterator:: MIT_KEYS_ASSOC);

なんて変化だ... ...


この文はどういう意味ですか

良いもの、集める価値があります

私は 1 年間 php を使ってきましたが、このオブジェクトを初めて見ました

$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);

以上です、ああ...

この文はどういう意味ですか

マニュアルの SPL の章を確認してください

php5.5 では array_column 関数が追加されています、これは使用できます

php5.5でarray_column関数が追加されました、これが使えます

私も昨日の昼に質問に答えて、マニュアルを見る前に調べましたが、よく見ると使ったことがないような気がしました。新しく追加されたことに気づきました

これは良いですね、多くのフィルターとトラバーサルが減ります


返信をくれた人はもう削除されましたか?

array_column ? 配列内の指定された列を返します

自分で書くのは簡単です

		    public function swapRowCol($inArr)		    {		        return call_user_func_array('array_merge_recursive', $inArr);		    }
Array

(
[0] => 3
[1] => 2
[2] => 1
[3] = > 7
[8] => 14
[13] => 11
)


初心者、まだわかりません。

とても役に立ちました!いいね!

マークして、時間があるときに見てください

マスター、技術的なポイントがたくさんあります。

行きます。 。 。 1ヶ月プレイしてもまだ200ポイント未満です。

私たちは皆素晴らしい人です、それについて学んでください、ありがとう

とてもたくさんのポイント

通りがかりに見に行きました。 。 。 。 。

学んで学んでください

コレクション…………

共有してくれてありがとう、学びました

共有してくれてありがとう!私たちはまだまだ学び続ける必要があります!

学びました。 。 。 。 。やあ、私たちはとても弱いです

朝早くから良いことがあります、投稿者に感謝します

投稿者を助けてください php SQL インジェクションの脆弱性が機能しません。 。

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