Set :: classicExtract()CakePHP 2.x Hash :: alternative

时间:2016-06-15 12:01:33

标签: php cakephp cakephp-2.x

我有一个这样的数组:

$array = array(
    1234 => array(
        'title' => 'TitleA',
        'extra' => array(
            45 => 'SubA',
            54 => 'SubB',
        ),
        // More irrelevant data
    ),
    2345 => array(
        'title' => 'TitleB',
        'extra' => array(
            89 => 'SubC',
            98 => 'SubD',
        ),
        // More irrelevant data
    ),
);

我用:

$data = Set::classicExtract($array, '{\d+}.title');

获得如下数组:

array(1234 => 'TitleA', 2345 => 'TitleB');

$data = Set::classicExtract($array, '{\d+}.extra');

获得如下数组:

array(
    1234 => array(
        45 => 'SubA',
        54 => 'SubB',
    ),
    2345 => array(
        89 => 'SubC',
        98 => 'SubD',
    ),
)

现在已经弃用了Set :: class一段时间(从2.2开始,我们使用2.8)我想使用Hash :: class。但我找不到能给我相同结果的功能。我已经尝试过Hash :: extract()和Hash :: combine(),但没有成功。

这是否可以使用Hash :: class?

1 个答案:

答案 0 :(得分:1)

我正在做一些类似的工作。没有找到任何其他解决方案,只是如何将数组元素的键设置为数组本身。所以只需创建帮助器就可以将_key设置为数组:

array_walk($array, function(&$item, $key){
    $item['_key'] = $key;
});

然后一切都变得容易:

$result = Hash::combine($array, "{n}._key", "{n}.title");

$result = Hash::combine($array, "{n}._key", "{n}.extra");