CakePHP:在整个数组上使用 Inflector 类

Posted

技术标签:

【中文标题】CakePHP:在整个数组上使用 Inflector 类【英文标题】:CakePHP: Use Inflector Class over whole array 【发布时间】:2011-09-25 10:24:28 【问题描述】:

我需要对从我的数据库中提取的所有结果使用Inflector::slug(),当然,这些结果是在数组中检索的。是否有可能,或者我需要循环每个结果并对其进行处理?

谢谢!

【问题讨论】:

【参考方案1】:

phparray_map() 函数可能会满足您的需求(尽管它假定一个简单的索引数组)。

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

如果您正在寻找更复杂的东西,CakePHP 的 Set 实用程序类可能有助于多步骤实现。

我还没有在 CakePHP 上下文中尝试过这个(即通过 CakePHP 类方法进行映射),但我想不出任何原因它不会在我的脑海中发挥作用。也许它至少能让你开始。

【讨论】:

这不会将数组值转换为 slug 吗?如何转换键的大小写? 也许是一个变种? array_map('Inflector::slug', array_keys($your_array)) 之类的东西? 是的,但这将返回一个由数字键组成的新数组,并且这些值将是初始数组的 slugified 键。我认为最好的方法是遍历数组并进行必要的更改。丑陋,但高效。【参考方案2】:

根据阵列,您可以使用array_walkarray_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);
  
);

我有一段时间没有使用 Cake,但正如 Rob Wilkerson 所说,您可能会发现 Set 类可以让这件事变得更轻松。

【讨论】:

以上是关于CakePHP:在整个数组上使用 Inflector 类的主要内容,如果未能解决你的问题,请参考以下文章

在 CakePHP 的 WHERE IN 中使用数组

cakephp : 使用 $validate 数组验证登录表单

使用 jquery 调用 cakephp 动作并将数组作为参数传递

cakephp saveMany 使用 $fieldList (无表单)

CakePHP:以数组为参数调用另一个控制器动作的最佳方法?

尝试使用 cakephp 2.0 保存表单数组数据