0

可以说我有一个像这样的数组:

$东西=数组
(
    [test1] => 某事
    [test2] => 某事
    [信息] => 是的
    [数组] => 数组
        (
            [test1] => 别的东西
            [test2] => 别的东西
            [信息] => 也许
            [数组] => 数组
                (
                    [test1] => 某事
                    [信息] => 是的
                )

        )
)

我如何编写一个函数,该函数通过$thing并向每个称为“有效”的部分添加一个键,TRUE其值为“信息”的值为“是”,FALSE否则为“是”?

我基本上希望最终数组看起来像:

$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

为什么不将值添加到第一个数组并认为它对其余数组有效。

编辑:做一个递归调用,传递 $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 回答