cakephp-2.0 - 使用cakePHP的Hash类从数组中提取数据

标签 cakephp-2.0

我有一个像这样的数组:

Array(
    [Rating] => Array(
        [0] => Array(
            [id] => 4
            [rating] => -1
        ),
        [1] => Array(
            [id] => 14
            [rating] => 9.7
        ),
        [2] => Array(
            [id] => 26
            [rating] => 9.55
        )
    )
)

我需要从该数组中提取所有大于等于0的评分,并仅提取数字。我用Set::extract('/Rating/rating[rating>-1]', $video)做得很好

但是我随后了解到,此方法已被弃用,您现在应该使用Hash类。因此,我查找了新语法并写道:
Hash::extract($video, 'Rating.{n}.rating[rating>-1]');

这给了我正确的结果,但是却给出了一个烦人的警告:Warning (4096): Argument 1 passed to Hash::_matches() must be an array, string given, called in E:\www\lib\Cake\Utility\Hash.php on line 131 and defined [CORE\Cake\Utility\Hash.php, line 170]
当我没有条件([rating>-1])时,不会发生警告,但是当然包括-1,这是我所不希望的。我在这里做错了什么?我会以某种方式滥用此功能吗?我应该只使用不推荐使用的Set类吗?还是我应该忽略警告,因为一旦将该应用程序投入生产模式,警告将不会显示?

最佳答案

这个问题已经很老了,我敢肯定它已经解决了,但是CakePHP文档对于Hash path语法的用法还不太清楚。因此,如果有人遇到了这个问题,这就是我的发现。

问题中的语法不正确。正确的语法是'Hash::extract($ratings, 'Rating.{n}[rating>-1].rating')'

根据文档:“ token 由两组组成。表达式用于遍历数组数据,而匹配项用于限定元素。
{n}[rating>-1]被视为一个 token {n}表达式,它过滤数组键,在这种情况下,键必须是数字。 [rating>-1]匹配器,它过滤数组元素,在这种情况下,该元素必须是一个数组,其中包含一个名为rating的键以及一个大于-1的关联值。一旦有了array元素,就可以得到rating

    $ratings = array(
        'Rating' => array(
            array(
                'id' => 4,
                'rating' => -1
            ),
            array(
                'id' => 14,
                'rating' => 9.7
            ),
            array(
                'id' => 26,
                'rating' => 9.55
            )
        )
    );
    print_r( Hash::extract($ratings, 'Rating.{n}[rating>-1].rating') );

结果是:
Array ( [0] => 9.7 [1] => 9.55 )

关于cakephp-2.0 - 使用cakePHP的Hash类从数组中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12808983/

相关文章:

mysql - CakePHP 命名约定 - 一张表依赖自身(mysql)

cakephp - 将 html 属性分配给 CakePHP 的 HtmlHelper 图像中的 url 链接

ssl - 我的网站在登录时在 firefox 中出现内容损坏错误

mysql - CakePHP 发送多封电子邮件而不是一封

cakephp-2.0 - 一个适用于多个应用程序的 CakePHP 库

php - CakePHP 递归实现漂亮的路由 - 类别、主题、部分、小节等

cakephp - 调试在 get 中发送的 CakePHP HttpSocket 数据

php - 未捕获异常 'CacheException',消息为“缓存引擎 _cake_core_ 未正确配置

Cakephp 查找多个模型上的所有查询

cakephp-2.0 - CakePHP 2.0 - 使用带有表单助手的 MySQL ENUM 字段来创建选择输入