Month: January 2017

Best practice to generate random token in PHP

Posted by – January 10, 2017

在 Stackoverflow 看到一篇超級實用的文:在 PHP 中產生隨機字串的最佳實踐。

產生隨機字串這個看似不起眼的議題實作起來還挺麻煩的,曾經為了如何產生字串跟同事討論了許久。

$length = 16;
$token = bin2hex(openssl_random_pseudo_bytes($length));
# => e9bf18672b051619a3479ecbe1cb7d08

唯一的參數 $length 可以替換成任意整數,產生的字串長度就是 $length *2。

同場加映,Google Chrome 的亂數演算法也有改過

How to Flatten a Multidimensional Array in PHP?

Posted by – January 9, 2017

最近碰到的小需求:如何將多維陣列攤平成一維陣列?....

本來以為 PHP 那巨大的 Lib 會有一個神奇的 function 完成這任務,結果翻了一遍 php.net 的文件,沒有找到這神奇的功能。不過還是有另一個神妙的 function 可以拿來用,那就是 array_walk_recursive,這個 function 會有遞迴的方式走完整個 array,然後看使用者後續想幹嘛...

以攤平一維陣列為例,以下是只保留 value 的作法...

function flatten(array $array) {
  $return = array();
  array_walk_recursive($array, function($a) use (&$return) {
    $return[] = $a; 
  });
  return $return;
}

如此一來就可以將多維陣列轉為一維。若是要保留 key 與 value,要注意 key 名稱是否有重複 (isset)。