Set::classicExtract() CakePHP 2.x 哈希::替代

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

我有一个这样的数组:

$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 这甚至可能吗?

我在做一些类似的工作。没有找到任何其他解决方案,只是如何将数组元素的键设置为数组本身。所以刚刚创建了帮助程序以将 _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");