如何将数组拆分为多个部分并添加新键(cakephp 2.5)

如何将数组拆分为多个部分并添加新键(cakephp 2.5),php,arrays,cakephp,Php,Arrays,Cakephp,经过研究,我仍在寻找解决方案 我在我的控制器中得到了这个数组,我想作为下面的结果进行分离。这意味着添加一个带有uid引用的键 谢谢 原始阵列: array( 'team_id-43' => '1', 'view-43' => '1', 'edit-43' => '1', 'timesheet-43' => '1', 'holiday-43' => '0', 'author-43' => '12', 'te

经过研究,我仍在寻找解决方案

我在我的控制器中得到了这个数组,我想作为下面的结果进行分离。这意味着添加一个带有uid引用的键

谢谢

原始阵列:

array(
    'team_id-43' => '1',
    'view-43' => '1',
    'edit-43' => '1',
    'timesheet-43' => '1',
    'holiday-43' => '0',
    'author-43' => '12',
    'team_id-44' => '1',
    'view-44' => '0',
    'edit-44' => '1',
    'timesheet-44' => '0',
    'holiday-44' => '0',
    'author-44' => '12'
)
通缉结果:

$uid43 = array(
  'team_id' => '1',
  'user_id' => 43
  'view' => '1',
  'edit' => '1',
  'timesheet' => '1',
  'holiday' => '0',
  'author' => '43',
))


))

下面的代码将把你的数组(这里称为
$test
)转换成你想要的两个数组

foreach ($test as $key => $value) {
    $keyIndex = explode('-', $key);
    $keyIndex = $keyIndex[count($keyIndex) - 1];
    if (is_numeric($keyIndex)) {
        $newKey = str_replace('-' . $keyIndex, '', $key);
        $arrayName = 'uid' . $keyIndex;
        if (!isset($$arrayName)) {
            $$arrayName = array();
        }
        ${$arrayName}["$newKey"] = $value;
    }

}

print_r($uid43);
print_r($uid44);

建议您使用
preg\u match()
。例如:

$newArr = array();
foreach($arr as $key=>$val){
    preg_match( '/-\d+/', $key, $matches);
    $ind = trim($matches[0], '-');
    if(is_numeric($ind)){
        $px = str_replace($matches[0], '', $key);
        $newArr['uid'.$ind][$px] = $val;
    }
}

extract($newArr, EXTR_PREFIX_SAME, "wddx");

print '<pre>';
print_r($uid43);
print_r($uid44);
print '</pre>';
$newArr=array();
foreach($arr作为$key=>$val){
预匹配('/-\d+/',$key,$matches);
$ind=trim($matches[0],'-');
如果(是数字($ind)){
$px=str_replace($matches[0],“”,$key);
$newArr['uid'.$ind][$px]=$val;
}
}
摘录($newArr,EXTR_前缀相同,“wddx”);
打印“”;
印刷费($uid43);
印刷费($uid44);
打印“”;

非常感谢,这正是我想要的。我现在需要分析你的代码来理解。再次感谢;)你是如何得到这个数组的?也许我们可以帮你做一个更好的查询。也谢谢;)我尝试了两种功能。两者都很好地工作;)
$newArr = array();
foreach($arr as $key=>$val){
    preg_match( '/-\d+/', $key, $matches);
    $ind = trim($matches[0], '-');
    if(is_numeric($ind)){
        $px = str_replace($matches[0], '', $key);
        $newArr['uid'.$ind][$px] = $val;
    }
}

extract($newArr, EXTR_PREFIX_SAME, "wddx");

print '<pre>';
print_r($uid43);
print_r($uid44);
print '</pre>';