140 阅读1分钟

当key有分级符时,递归改变数组的层次结构

public function test()
{
	$arr = ['tack_pct'=>10, 'finish.pct.all'=>11, 'finish.pct'=>2, 'finish.in'=>23, 'user_name'=>'hy'];
    $array = [];
    foreach($arr as $key => $value){
        if (strpos($key, '.')) {
            // print_r($k);die;
            $array[] = self::getLevelArray($data = [], $key, $value);
        } else {
            $array[$key] = $value;
        }
    }
}

public static function getLevelArray($arr, $key, $value)
{
    if(empty($key)){
        $arr = $value;
        return $arr;
    }
    $keyArray = explode('.', $key);
    $thisKey = array_shift($keyArray);
    if (!isset($arr[$thisKey])) {
        $arr[$thisKey] = [];
     }

    $arr[$thisKey] = self::getLevelArray([], implode('.', $keyArray), $value);
    // print_r($arr);die;
    return $arr;
}

求数组中所有的数字和字符串之和

public function test()
{
	$array = [
            'task_pct'=> 2,
            'finish_pct'=>[
                'f'=>3,
                'i'=>'4',
                'n'=>[
                    'p'=>5,
                    'c'=>'6',
                    't'=>'h'
                ]

            ],
            'username'=>'hy'
        ];
    $res = self::getArraySum($array);
}

public static function getArraySum($array)
{
    if(!is_array($array)){
        return $array;
    }
    $v = 0;
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $v += self::getArraySum($value);
        } else {
            $v += $value;
        }
    }
    return $v;
}