【问题标题】:Recursive function and add to an array递归函数并添加到数组
【发布时间】:2021-01-17 08:38:32
【问题描述】:

我需要递归函数来将元素添加到数组中。这是我的代码:

$array_final = array();
$counter = 1;

function get_previuos_levels($first_available_place_x, $first_available_place_y, $array_final , $counter) {
                
    $new_x = $first_available_place_x-1;
                
    $devider = $first_available_place_y/3;
    $new_y = ceil($devider);

    //echo $new_x;
    //echo '<br>';
    //echo $new_y;

        if($new_x > 1) {
            $array_final['value'][$counter] = $new_x . ' - ' . $new_y;
            $counter++;
                            
            get_previuos_levels($new_x, $new_y, $array_final , $counter);
                            
                            
        }


        return $array_final;
        
}
        
$result = get_previuos_levels(3, 5, $array_final , $counter);
        
    

echo '<pre>';
print_r($result );
echo '</pre>';

基本上,如果我回显 $new_x 和 $new_y,我会得到我所期望的。 问题是我的 $result 数组,它只给了我第一项(2 -2),但第二项丢失了(1 -1)。我猜问题在于将项目添加到数组中但找不到问题。

【问题讨论】:

  • 您的内部呼叫需要是$array_final = get_previuos_levels($new_x, $new_y, $array_final , $counter);。否则,您只是丢弃了它所做的任何更改。
  • 你也可以使用array_walk_recursive
  • 我从数据库中动态获取这些值并添加到内部函数中: $result = get_previuos_levels($first_available_place_x, $first_available_place_y, $array_final , $counter);

标签: php arrays recursion


【解决方案1】:

如果有人需要,我找到了解决方案。

    $array_final = array();
    $counter = 1;
    
    
     function get_previuos_levels($first_available_place_x, $first_available_place_y) {
         
            $new_x = $first_available_place_x-1;
                
            $devider = $first_available_place_y/3;
            $new_y = ceil($devider);
            
            $array_key = 1;
            
            for($value = $new_x; $value > 0; $value--) {
                 $array_final['x_coor'][$array_key] = $value;
                 $array_final['y_coor'][$array_key] = $new_y;
                 
                 
                $devider = $new_y/3;
                $new_y = ceil($devider);
                 
                $array_key++;
                 
                 
            }
            return $array_final;
    }
        
        
    $result = get_previuos_levels($first_available_place_x, $first_available_place_y);  
        
        
        
    echo '<pre>';
    print_r($result);
    echo '</pre>';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2022-12-03
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多