我有一个这样的数组:
$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?
答案 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");