鍍金池/ 問(wèn)答/ PHP問(wèn)答
伐木累 回答

KMP算法

KMP字符串模式匹配通俗點(diǎn)說(shuō)就是一種在一個(gè)字符串中定位另一個(gè)串的高效算法。簡(jiǎn)單匹配算法的時(shí)間復(fù)雜度為O(m*n);而KMP算法,可以證明它的時(shí)間復(fù)雜度為O(m+n)。

http://www.cnblogs.com/whyand...

涼汐 回答
  1. 看硬件
  2. 看索引
  3. 多數(shù)情況下沒(méi)那么容易因?yàn)槁?lián)表查詢而導(dǎo)致性能瓶頸,如果有,先檢查前面兩個(gè),然后優(yōu)化表結(jié)構(gòu)、SQL語(yǔ)句、引擎參數(shù)
  4. 實(shí)在要避免聯(lián)表,那只能單表拿數(shù)據(jù)自己在應(yīng)用層做合并,但是這樣你不能保證內(nèi)存中每個(gè)表的數(shù)據(jù)都是最新的。
北城荒 回答

問(wèn)題出在你的ThinkPHP版本上,官方的5.0版本的擴(kuò)展庫(kù)版本號(hào)都是1.*,2.0版本均為T(mén)hinkPHP5.1版本專用。
先更新你的ThinkPHP版本,再重新composer安裝topthink/think-testing。

離人歸 回答

function foo(){}
jQuery().perpend(); //a
foo(); //b
執(zhí)行A后執(zhí)行B,JS是單線程

假灑脫 回答

Mock Object不能模擬靜態(tài)方法,可以考慮用AspectMock

女流氓 回答

一種是你把參數(shù)暴露到父級(jí)地址欄上面保存。每次刷新時(shí)讀取地址欄參數(shù)。二是你存到sessionStorage里面,每次刷新時(shí)獲取賦值。

你的瞳 回答

你看看這個(gè)行不行, 大概也就這樣思路.

/**
 * 紅包分配算法
 *
 * example
 *      $coupon = new Coupon(200, 5);
 *      $res = $coupon->handle();
 *      print_r($res);
 *
 * @author Flc <2018-04-06 20:09:53>
 * @see http://flc.ren | http://flc.io | https://github.com/flc1125
 */
class Coupon
{
    /**
     * 紅包金額
     *
     * @var float
     */
    protected $amount;

    /**
     * 紅包個(gè)數(shù)
     *
     * @var int
     */
    protected $num;

    /**
     * 領(lǐng)取的紅包最小金額
     *
     * @var float
     */
    protected $coupon_min;

    /**
     * 紅包分配結(jié)果
     *
     * @var array
     */
    protected $items = [];

    /**
     * 初始化
     *
     * @param float $amount     紅包金額(單位:元)最多保留2位小數(shù)
     * @param int   $num        紅包個(gè)數(shù)
     * @param float $coupon_min 每個(gè)至少領(lǐng)取的紅包金額
     */
    public function __construct($amount, $num = 1, $coupon_min = 0.01)
    {
        $this->amount = $amount;
        $this->num = $num;
        $this->coupon_min = $coupon_min;
    }

    /**
     * 處理返回
     *
     * @return array
     */
    public function handle()
    {
        // A. 驗(yàn)證
        if ($this->amount < $validAmount = $this->coupon_min * $this->num) {
            throw new Exception('紅包總金額必須≥'.$validAmount.'元');
        }

        // B. 分配紅包
        $this->apportion();

        return [
            'items' => $this->items,
        ];
    }

    /**
     * 分配紅包
     */
    protected function apportion()
    {
        $num = $this->num;  // 剩余可分配的紅包個(gè)數(shù)
        $amount = $this->amount;  //剩余可領(lǐng)取的紅包金額

        while ($num >= 1) {
            // 剩余一個(gè)的時(shí)候,直接取剩余紅包
            if ($num == 1) {
                $coupon_amount = $this->decimal_number($amount);
            } else {
                $avg_amount = $this->decimal_number($amount / $num);  // 剩余的紅包的平均金額

                $coupon_amount = $this->decimal_number(
                    $this->calcCouponAmount($avg_amount, $amount, $num)
                );
            }

            $this->items[] = $coupon_amount; // 追加分配

            $amount -= $coupon_amount;
            --$num;
        }

        shuffle($this->items);  //隨機(jī)打亂
    }

    /**
     * 計(jì)算分配的紅包金額
     *
     * @param float $avg_amount 每次計(jì)算的平均金額
     * @param float $amount     剩余可領(lǐng)取金額
     * @param int   $num        剩余可領(lǐng)取的紅包個(gè)數(shù)
     *
     * @return float
     */
    protected function calcCouponAmount($avg_amount, $amount, $num)
    {
        // 如果平均金額小于等于最低金額,則直接返回最低金額
        if ($avg_amount <= $this->coupon_min) {
            return $this->coupon_min;
        }

        // 浮動(dòng)計(jì)算
        $coupon_amount = $this->decimal_number($avg_amount * (1 + $this->apportionRandRatio()));

        // 如果低于最低金額或超過(guò)可領(lǐng)取的最大金額,則重新獲取
        if ($coupon_amount < $this->coupon_min
            || $coupon_amount > $this->calcCouponAmountMax($amount, $num)
        ) {
            return $this->calcCouponAmount($avg_amount, $amount, $num);
        }

        return $coupon_amount;
    }

    /**
     * 計(jì)算分配的紅包金額-可領(lǐng)取的最大金額
     *
     * @param float $amount
     * @param int   $num
     */
    protected function calcCouponAmountMax($amount, $num)
    {
        return $this->coupon_min + $amount - $num * $this->coupon_min;
    }

    /**
     * 紅包金額浮動(dòng)比例
     */
    protected function apportionRandRatio()
    {
        // 60%機(jī)率獲取剩余平均值的大幅度紅包(可能正數(shù)、可能負(fù)數(shù))
        if (rand(1, 100) <= 60) {
            return rand(-70, 70) / 100; // 上下幅度70%
        }

        return rand(-30, 30) / 100; // 其他情況,上下浮動(dòng)30%;
    }

    /**
     * 格式化金額,保留2位
     *
     * @param float $amount
     *
     * @return float
     */
    protected function decimal_number($amount)
    {
        return sprintf('%01.2f', round($amount, 2));
    }
}

此代碼轉(zhuǎn)載至PHPhuo.org用戶葉子坑, 侵刪!
PHP 實(shí)現(xiàn)微信紅包拆分算法

悶騷型 回答

一般用戶將商品添加到購(gòu)物車點(diǎn)擊結(jié)算頁(yè)面的時(shí)候,由后臺(tái)去判斷的,不需要前端判斷。后臺(tái)直接判斷用戶是否滿足金幣使用條件,能用多少金幣,然后自動(dòng)在頁(yè)面上顯示出來(lái),不需要用戶手動(dòng)操作,畢竟有便宜可占的時(shí)候很少有用戶主動(dòng)關(guān)閉金幣抵扣,那么如果用戶確實(shí)關(guān)閉的話,那么前端一個(gè)DOM操作就OK了。剩下的是提交訂單,支付就結(jié)束了。

兔寶寶 回答

mysql重啟就會(huì)產(chǎn)生一個(gè)新的binlog文件,在命令行執(zhí)行show binary logs; 查看倒數(shù)第二個(gè)文件就是你重啟前執(zhí)行過(guò)的記錄

挽青絲 回答

1.你這就是個(gè)圖片為啥要用iframe標(biāo)簽?zāi)兀?br>2.水平垂直居中也就是讓iframe居中,寬度是100%的,所以沒(méi)有居中的說(shuō)法,垂直方向設(shè)置position:fixed;top:50%;margin-top:-250px;

柚稚 回答

我也遇到這個(gè)問(wèn)題了,感覺(jué)是有特殊字符,但是怎么都查不出來(lái),反復(fù)測(cè)試了好久才知道。
打不出來(lái),至今不知道是個(gè)什么字符:ab,就是這個(gè)字符a和b字母之間的.
我記得在windows系統(tǒng)里,右鍵菜單的時(shí)候會(huì)有一些特殊的字符,比如把文字翻轉(zhuǎn)過(guò)來(lái)等等,應(yīng)該就是那些字符中的一個(gè),但是很奇怪是怎么被我不小心寫(xiě)出來(lái)的。。

我以為 回答

chrome瀏覽器可以安裝一個(gè)允許跨域的插件
https://chrome.google.com/web...

命多硬 回答

單引號(hào)不解析變量,雙引號(hào)解析變量,把單引號(hào)換成雙引號(hào)就行啦

氕氘氚 回答

在控制里創(chuàng)建一個(gè)方法,直接調(diào)用$this->openUrlOnNewTab("https://segmentfault.com");

    public function openUrlOnNewTab($url) {
        echo "<script>window.open('{$url}');</script>";
        exit;
    }

Route::match(['get', 'post'], '/test/{test}', 'AddCluesController@index');

getpost 交給同一個(gè)控制器同一個(gè)方法,不是推薦的方法。

假設(shè)目前你確實(shí)要這樣寫(xiě),無(wú)論是 get 還是 post ,你要獲取到 url /test/{test} 中的 {test} 的值,有兩種辦法:

1.在 index 方法中指定,如下:

public function index($test){
        //your logic.
    }

2.通過(guò) request()->route('test'); 方法。

之所以要這樣,是因?yàn)檫@是路由參數(shù),請(qǐng)看官方文檔 Route Parameters

其他

對(duì)于 GET 請(qǐng)求,如果你是要獲取 url (http://www.baidu.com?q=xx&b=xxx)中 ? 后的參數(shù),是可以使用 request()->all() 獲取到的。

對(duì)于 POST 請(qǐng)求,你要獲取到 form 中的所有用戶的輸入,通過(guò) request()->all() 也是能獲取到的。

當(dāng)然,你可以通過(guò) request()->input(['key1','key2']); 的方式來(lái)獲取指定內(nèi)容。

具體的多看下文檔和源碼,就清楚了。

吃藕丑 回答

你nginx服務(wù)沒(méi)啟動(dòng)

拮據(jù) 回答

reLaunch 的時(shí)候,不會(huì)重新走app.js 的onLaunch,但是在某些手機(jī)上會(huì)重新走,這個(gè)應(yīng)該是和微信的版本有關(guān)系的,官方給的說(shuō)法是最新版本的微信不會(huì)存在這個(gè)問(wèn)題。