1

これが私のジレンマです。よろしくお願いします。

私は、動的連想配列用の変数変数などを作成しようとしていますが、これを行う方法を理解するのに非常に時間がかかります。ファイルエクスプローラーを作成しているので、配列のキーとしてディレクトリを使用しています。

例:
値を割り当てることができるように、これを取得する必要があります

$dir_list['root']['folder1']['folder2'] = value;

だから私はこれらの線に沿って何かをすることを考えていました...

if ( $handle2 = @opendir( $theDir.'/'.$file ))
{
    $tmp_dir_url = explode($theDir);
    for ( $k = 1; $k < sizeof ( $tmp_dir_url ); $k++ )
    {
        $dir_list [ $dir_array [ sizeof ( $dir_array ) - 1 ] ][$tmp_dir_url[$k]]
    }

これは私が行き詰まっているところです、私はforループを通る各反復の間に配列に新しい次元を動的に追加する必要があります...しかし私はどのように手がかりがありません

4

3 に答える 3

2

次のような再帰的アプローチを使用します。

function read_dir_recursive( $dir ) {
    $results = array( 'subdirs' => array(), 'files' => array() );
    foreach( scandir( $dir ) as $item ) {
        // skip . & ..
        if ( preg_match( '/^\.\.?$/', $item ) )
            continue;
        $full = "$dir/$item";
        if ( is_dir( $full ) )
            $results['subdirs'][$item] = scan_dir_recursive( $full );
        else
            $results['files'][] = $item;
    }
}

コードを試すための PHP がないため、コードはテストされていません。

乾杯、
ハギ

于 2010-08-26T09:39:24.890 に答える
0

配列を配列セルに自由に配置でき、必要なディレクトリのみに1次元を効果的に追加できます。

つまり

$a['x'] = 'text';
$a['y'] = new array('q', 'w');

print($a['x']);
print($a['y']['q']);
于 2010-08-26T09:33:22.043 に答える
0

これはどう?これにより、配列値が複数の次元にスタックされます。

$keys = array(
'year',
'make',
'model',
'submodel',
);

$array = array(); print_r(array_concatenate($array, $keys)); function array_concatenate($array, $keys){ if(count($keys) === 0){ return $array; } $key = array_shift($keys); $array[$key] = array(); $array[$key] = array_concatenate($array[$key], $keys); return $array; }

私の場合、 $keys に何を含めたいかはわかっていました。私はそれを次の代わりに使用しました:

if(isset($array[$key0]) && isset($array[$key0][$key1] && isset($array[$key0][$key1][$key2])){ // do this }

乾杯。

于 2015-04-28T17:21:39.120 に答える