2011-06-29 2 views
1

私のデータベースからフェッチされたすべての結果に対してInflector::slug()を使用する必要があります。それはどういうわけか、または私は各結果をループし、それをslugifyする必要がありますか?CakePHP:配列全体にインフレクタークラスを使用

ありがとうございます!

答えて

2

PHPのarray_map()関数は、(単純なインデックス配列を前提としていますが)必要な処理を行う可能性があります。

array_map('Inflector::slug', $your_result) 

あなたは、より複雑な何かを探しているなら、CakePHPのSetユーティリティクラスは、多段階の実装に役立つかもしれません。

私はこれをCakePHPコンテキスト(つまりCakePHPクラスメソッドを使ったマッピング)で試したことはありませんが、頭の上からうまくいかない理由は考えられません。おそらく、少なくともあなたを始めさせるでしょう。

+0

これは配列値をスラッグに変換しませんか?キーの大文字小文字を変換するのはどうですか? – Piero

+0

おそらく異形ですか? 'array_map( 'Inflector :: slug'、array_keys($ your_array))'のようなもの? –

+0

ええ、それは数値キーで構成される新しい配列を返し、値は初期配列のslugifiedキーになります。私はこれを行う最良の方法は、配列をループして変更を行うことだと思います。醜いですが、効率的です。 – Piero

0

アレイに応じて、array_walkまたはarray_walk_recursiveを使用できます。

何かこれはうまくいくはずです。

これは5.3+です。あなたはまた、このような何か行うことができ、特定のフィールドに制限したい場合は

array_walk_recursive($posts, function(&$value) { 
    $value = Inflector::slug($value); 
}); 

:私はしばらくの間ではなく、ロブウィルカーソンが言ったようにケーキを使用していない

array_walk_recursive($posts, function(&$value, $key) { 
if ($key == 'title') { 
    $value = Inflector::slug($value); 
    } 
}); 

を、あなたが見つけるかもしれませんSetクラスがこれを軽量化できることを示しています。

関連する問題