猿问

函数结束后分配给 stdClass() 的属性变为空(全局)

我正在尝试从文件夹内的文件夹中获取文件名(文件夹内有一个名为1的../merchant_assets/文件夹,我正在尝试获取该文件夹内的所有名称文件)


下面的代码工作正常,但是当我将包含结果的数组分配$temp给stdClass()变量$container时,当我尝试在函数外部打印出数组时,它变为空,print_r($container->screenshots)但如果我在函数内部打印它,它就可以工作


<?php 

include 'config.php';


$url = "http://" . $_SERVER['HTTP_HOST'] . '/merchant_assets/';

$target = '../merchant_assets';


$merchant_id = 1;


$container = new stdClass();


$folder = '';


// Call the function

dir_contents_recursive($target);


// Get all screenshots images from merchant_assets folder based on merchant_id

function dir_contents_recursive($dir) {


    // open handler for the directory

    global $container;

    $iter = new DirectoryIterator($dir);

    $temp = Array();

    foreach( $iter as $item ) {


        // make sure you don't try to access the current dir or the parent

        if ($item != '.' && $item != '..') {


            if( $item->isDir() ) {


                // call the function on the folder

                global $merchant_id, $folder;


                if($merchant_id == $item->getFilename()) {


                    $folder =  $item->getFilename();

                    dir_contents_recursive("$dir/$item");

                }else 

                    continue;

            } else {


                // print files

                global $url, $folder;

                $current_index = count($temp);

                $temp[$current_index] = $url . $folder . '/' . $item->getFilename();

            }

        }

    }

    $container->screenshots = $temp;


    print_r($container->screenshots); // It shows the results

}


// Handle response

$response = $container;


print_r($container->screenshots); // No results???


$response_json = json_encode($response);

echo $response_json;

?>

我希望输出为 [ 我有意将每个索引的值更改为item]


Array ( 

[0] => item 

[1] => item 

[2] => item 

[3] => item 


千巷猫影
浏览 162回答 1
1回答

波斯汪

问题是您的递归调用未将数据分配给$temp.在你的函数开始时,你 decleare&nbsp;$temp = Array();- 但你永远不会在他身上使用 global 。所以第一次调用的函数$temp是空数组并且if( $item->isDir() )是 TRUE 所以它进入递归。在那里你添加元素$temp并分配$container->screenshots(这样打印效果很好)。但是,在退出递归调用后,您再次分配$temp给$container->screenshots但在此范围内$temp是空数组!(没有结果)。我强烈建议不要在这里使用 global 而是返回文件数组作为递归函数的返回参数。
随时随地看视频慕课网APP
我要回答