0

私が次のような配列を持っているとしましょう:

$things=配列
((
    [test1]=>何か
    [test2]=>何か
    [情報]=>はい
    [配列]=>配列
        ((
            [test1]=>何か他のもの
            [test2]=>何か他のもの
            [情報]=>多分
            [配列]=>配列
                ((
                    [test1]=>何か
                    [情報]=>はい
                )。

        )。
)。

「info」の値が「yes」である場合などの値$thingを使用して、「valid」と呼ばれる各部分にキーを追加する関数を作成するにはどうすればよいですか?TRUEFALSE

基本的に、最終的な配列は次のようになります。

$final=配列
((
    [test1]=>何か
    [test2]=>何か
    [情報]=>はい
    [有効]=>TRUE//これを追加
    [配列]=>配列
        ((
            [test1]=>何か他のもの
            [test2]=>何か他のもの
            [情報]=>多分
            [有効]=>FALSE//これを追加
            [配列]=>配列
                ((
                    [test1]=>何か
                    [情報]=>はい
                    [有効]=>TRUE//これを追加
                )。

        )。

)。

私は、サイトマップを管理し、ページのブレッドクラムとナビゲーションツリーを取得する簡単な方法を提供するcodeigniterのライブラリを作成していますが、このようなことを行う必要がある部分で立ち往生しています。

私が理解できない主な質問は 、配列を調べて各部分にキーを追加するにはどうすればよいですか?また、配列には無限の数の配列が存在する可能性があります。

ありがとう!

4

4 に答える 4

2
function setInfoTrueFalse($array){
    if(isset($array['info']) && $array['info']=='yes'){ 
        $array['valid']=TRUE;
    }else{
        $array['valid']=FALSE;
    }
    foreach($array as $key => $val){ # if we don't know the name of possible arrays, loop though
        if(is_array($val)){
            # loop one layer deeper if we have another array, could combine with the 'info' check if yes to that means this array exists and is an array
            $array[$key]=setInfoTrueFalse($array[$key]);
        }
    }
    return $array;
}

$final=setInfoTrueFalse($thing);
于 2012-09-20T16:44:17.960 に答える
2

これは、冗長な情報を追加しているように感じます。配列内のデータを再利用できないのはなぜですか?

[info] => yes
于 2012-09-20T16:33:51.803 に答える
1

あなたはこれを使うことができます

$thing = Array
(
        "test1" => "something",
        "test2" => "something",
        "info" => "yes",
        "array" => Array
        (
                "test1" => "something else",
    "test2" => "something else",
    "info" => "maybe",
                "array" => Array
                (
                        "test1" => "something",
                        "info" => "yes"
                )
        )
);



function validPush($array)
{
    foreach ($array as $key => $value)
    {
        if(is_array($value))
           $array[$key] = validPush($value);

        if($key == "info")
            $array['valid'] = ($value == "yes") ? true : false ;
    }
    return $array;
}

var_dump(validPush($thing));

出力

array
  'test1' => string 'something' (length=9)
  'test2' => string 'something' (length=9)
  'info' => string 'yes' (length=3)
  'array' => 
    array
      'test1' => string 'something else' (length=14)
      'test2' => string 'something else' (length=14)
      'info' => string 'maybe' (length=5)
      'array' => 
        array
          'test1' => string 'something' (length=9)
          'info' => string 'yes' (length=3)
          'valid' => boolean true
      'valid' => boolean false
  'valid' => boolean true
于 2012-09-20T16:48:57.887 に答える
0

なぜjusは最初の配列に値を追加し、残りの配列に対して有効であると見なしませんか。

編集:再帰呼び出しを実行し、取得した次元配列の数に応じて$ arrayを渡します(ここでは3)。

function add_array( $array) {  
    $array['info'] = 'yes';
 return $arr;
}

電話:

 $final = add_array(add_array(add_array($final)));
于 2012-09-20T16:35:10.680 に答える