为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
千巷猫影 2021-06-03 02:05:26
我正在尝试从文件夹内的文件夹中获取文件名(文件夹内有一个名为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 functiondir_contents_recursive($target);// Get all screenshots images from merchant_assets folder based on merchant_idfunction 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 
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

问题是您的递归调用未将数据分配给$temp.

在你的函数开始时,你 decleare $temp = Array();- 但你永远不会在他身上使用 global 。

所以第一次调用的函数$temp是空数组并且if( $item->isDir() )是 TRUE 所以它进入递归。在那里你添加元素$temp并分配$container->screenshots(这样打印效果很好)。

但是,在退出递归调用后,您再次分配$temp$container->screenshots但在此范围内$temp数组!(没有结果)。

我强烈建议不要在这里使用 global 而是返回文件数组作为递归函数的返回参数。


查看完整回答
反对 回复 2021-06-04
  • 1 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信