很久没做这事了
散分?
从数据库读取数据,多数为一个行列整齐的二维数组,姑且叫它做矩阵数组吧
当读取后用php计算涉及很多纵向计算(例如对某字段求和),我看很多人都习惯 $array[记录][字段],其实读取时就应该想好怎样分配数组一维和二维的key
有时获取的矩阵数组格式固定了,例如来自某个API,我看到不少人还按着记录去求二维的值,更有甚者还用递归,看着真累,把行列交换一下再计算多方便啊
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
这是使用方法,写得简单了点,只是为了怕自己太久没用忘了,提醒一下写法而已
<?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;?>
如果发现bug就自己处理吧……
回复讨论(解决方案)
mark!
学习一下 感谢分享
巢状数组迭代该如何写?
巢状数组迭代该如何写?
那就不是我这个考虑的了,你也来贡献一个
巢状数组是啥样的?
不考虑key的swapRowCol方法为啥比考虑key的swapRowColWithKey还复杂呢?
我经常这么用
public function swapRowCol($inArr) { return call_user_func_array('array_merge_recursive', $inArr); }
巢状数组是啥样的?
不考虑key的swapRowCol方法为啥比考虑key的swapRowColWithKey还复杂呢?
我经常这么用
public function swapRowCol($inArr) { return call_user_func_array('array_merge_recursive', $inArr); }
呵呵,如果输出正确当然你这个好
我当时是顺便练习SPL写的,之后就基本没用过swapRowCol(),一直都是用swapRowColWithKey(),所以就没再考虑优化了
巢状数组是啥样的?
巢状我没理解错的话就是阵列中还嵌套阵列(cell arrays? nested arrays?),维度细致化来说就是超出二维了
巢状数组是啥样的?
巢状我没理解错的话就是阵列中还嵌套阵列(cell arrays? nested arrays?),维度细致化来说就是超出二维了
那如果不考虑key的话用#5方法不是正好
接触php一年了,第一次看到这个对象
$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);
咋整啊......
学习了,记号一下
收藏+学习。
谢谢lz分享
好铁。先搜藏了
很拥挤啊。换行,大括号。
很拥挤啊。换行,大括号。
显示器1920像素,所以,换行更挤
过来学习一下
接触php一年了,第一次看到这个对象
$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);
咋整啊......
这句啥意思
好东东,值得收藏之
接触php一年了,第一次看到这个对象
$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);
咋整啊......
这句啥意思
自己查查手册 SPL一章
php5.5 增加了一个array_column函数,这个可以用用
php5.5 增加了一个array_column函数,这个可以用用
我也是昨天中午答人家一个问题查手册才看到,感觉从没用过,细看才知道新增加的
这咚咚不错,减少不少filter和遍历
谁给我的回复删了?
array_column ? 返回数组中指定的一列
自己写一个也很容易
$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),);print_r(array_column($b, 'action_id'));function array_column($ar, $key) { return array_map(function($item) use ($key) { return @$item[$key]; }, $ar);}
(
[0] => 3
[1] => 2
[2] => 1
[3] => 7
[8] => 14
[13] => 11
)
新手,还看不懂。
很有帮助!赞一个!
mark一下,有空看下
高手,技术分真多。
我去。。。玩了1个月还不到200分的路过。
都是牛人,学习一下
learn about,thanks
好多分啊
路过一观。。。。。
学习学习
收藏…………
感谢分享,学习了
谢谢分享!还要不断学习啊!
学习了。。。。。哎 ,我们弱爆了啊
大清早就有好东西,感谢楼主
求 楼主帮助 php sql注入漏洞 不会。。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。
