2

多次元配列をフィルタリングする方法に関する優れたチュートリアルをここで見つけました: PHPは特定のキーで2次元配列をフィルタリングします

その間

$filtered = array_filter(
    $array, 
    function($v) { 
        return $v['type'] == 'folder'; 
    }
); 

フォルダエントリのみを表示するという点で必要なことを正確に実行します。ユーザー入力に基づいて配列をフィルタリングできる必要があります。

したがって、上記のページで使用した例から、フォルダーのチェックボックスがあり、ページの場合、ユーザーが選択したもの(ページ、フォルダー、またはその両方)に応じて、選択内容が表示されます。

私が遭遇している問題は、$ v ['type']=='folder'を格納するために変数を使用できないように見えることです。

私は次のようなことをしたいと思っています:

$filtered = array_filter($array, function($v) { return $userSelections; });

また、eval()を使用して変数の内容を提供する可能性についても検討しました(これは最善のアイデアではないかもしれませんが、考えられる他のすべてを試しました)が、それも機能しないようです。 。

ここでのアドバイスは素晴らしいでしょう。

ありがとう。

4

1 に答える 1

1

これはおそらく、クロージャ内の可変スコープが原因です。次のようなものを試してください。

$filtered = array_filter($array, 
    function($v) use ($userinput) { 
        return in_array($v['type'], $_POST['userSelections']); 
    }
);

useクロージャーの内側からアクセス可能な外部変数を宣言すると、いわば「グローバル」になります。

編集:私は以下から最終的な解決策を含めました。

于 2012-09-07T16:54:55.443 に答える