ArrayWrapper for PHPで今まではJOINのキーには連想配列のキー名を指定するだけしかできませんでしたが、ラムダ式を渡せるようになりました。
これによって、指定したキーの値が連想配列だった場合など、さらに深い項目をキーに指定したり、加工した結果をキーに指定したりすることができるようになりました。
また、INNER JOINのみ対応していましたが、LEFT JOINにも対応することでJOINの活用の幅が広がりました。
まず最初に、ラムダ式が指定できるようになった説明から・・・
今までは、 
       $leftArray = array(
                    array("key" => 2,"name" => "Nasal Hair Cutter"),
                    array("key" => 3,"name" => "scissors"),
                    array("key" => 5,"name" => "knife")   
                );
        $rightArray = array(
                array("id" => 1,"item_id" => 2,"value" => 10),
                array("id" => 2,"item_id" => 2,"value" => 20),
                array("id" => 3,"item_id" => 2,"value" => 30),
                array("id" => 4,"item_id" => 3,"value" => 40),
                array("id" => 5,"item_id" => 3,"value" => 50),
                array("id" => 6,"item_id" => 5,"value" => 60),
                array("id" => 7,"item_id" => 5,"value" => 70),
            );
という配列に対して
//joinの引数は
//Join対象の配列,
//元の配列のキー一覧,
//join対象のキー一覧,
//joinした結果を表すmap関数,
//INNER JOINかLEFT JOINかを規定する
//となっている。
        $actual = ArrayWrapper::Wrap($leftArray)
                ->join($rightArray,
                        array("key"),
                        array("item_id"),
                        function ($leftValue,$rightValue)
                        {
                            return 
                                array("item_id" => $rightValue["item_id"],
                                         "name" => $leftValue["name"],
                                         "value" => $rightValue["value"]);
                        })
                ->toVar();
とキー指定のところに注目すると
array("key"),
                        array("item_id"),
と書いていましたが、キーにラムダ式を入れられるようになったので、
       $target = ArrayWrapper::Wrap($leftArray);
        $actual = $target
                ->join($rightArray,
                        array("key"),
                        array(function($x){return $x["item_id"];}),
                        function ($leftValue,$rightValue)
                        {
                            return 
                                array("item_id" => $rightValue["item_id"],
                                         "name" => $leftValue["name"],
                                         "value" => $rightValue["value"]);
                        })
                ->toVar();
と
array("key"),
                        array(function($x){return $x["item_id"];}),
のようにJOINするためのKEYの一覧に”function($x){return $x[“item_id”];}”というようなラムダも渡せるようになりました。
この機能、今みたいな配列の直近のIndexで解決できるものは、全然嬉しくないんですが、
“function($x){return $x[“a”][“b”];}”みたいに、何段か下の値を持ってきたい場合や、ある程度丸めて比較したい場合なんかに効果を発揮します。(実際に使っていてかなりの効果を得られています。)
次にLEFT JOINの説明です。
以下のように、Joinの最後の引数にJoinType::LEFTと渡してあげることで、left joinになります。
       $target = ArrayWrapper::Wrap($leftArray);
        $actual = $target
                ->join($rightArray,
                        array("key"),
                        array("item_id"),
                        function ($leftValue,$rightValue)
                        {
                            return 
                                array("item_id" => $leftValue["key"],
                                         "name" => $leftValue["name"],
                                         "value" => isset($rightValue) ? $rightValue["value"]:0);
                        },JoinType::LEFT)
                ->toVar();
			