0

構造を破壊せずにアレイをクリーンアップしたい。そこで、各要素の値を削除したいと思います。問題は、配列の次元が多いことです。

[array]
   [id] = "llll"
   [innerArray]
      [name] = "namenamename"
   [name] = "kdkdfk"
   [arryme]
      [id] = 121212
      [arraytarra] = "dd"

する必要があります

[array]
   [id] = ""
   [innerArray]
      [name] = ""
   [name] = ""
   [arryme]
      [id] = 0
      [arraytarra] = ""

これが私の始まりです:

private function cleanArray($array) {

    $return = $array;

    foreach($array as $key => $value) {

        if(is_Array($array[$key])) $this->cleanArray($array[$key]);
        else $return[$key] = "";
    }

}

bwoebi のおかげで最終版:

 /****************
 * cleanArray()
 ****************
 *   cleans an array: deletes the values but let the keys
 */
private function cleanArray($array) {

    foreach($array as &$value) {

        if(is_Array($value)) $value = $this->cleanArray($value);
        else if(is_Int($value)) $value = 0;
        else if(is_Bool($value)) $value = false;
        else $value = "";
    }

    return $array;

}
4

4 に答える 4

1
private function cleanArray($array) {

    foreach($array as &$value) {

        if(is_Array($value))
            $value = $this->cleanArray($value);
        else
            $value = "";
    }

    return $array;

}

あなたの最初はほとんどそれを行います (わずかな変更のみが必要でした) が、配列をコピーする必要はありません。パラメーター リストに参照演算子がないため、配列は値渡しされます。

また、foreach ループで参照によって配列値を使用することもできます。忘れないでください: 返された配列を変数に保存します。また、最終的な配列も返します。名前が付けられているため、何も返しません$return

于 2013-06-04T13:37:04.610 に答える
0

答えは、各値を null または null 文字列に設定する再帰関数になると思います。これは、別のことを行う再帰関数の例ですが、適切な出発点になるはずです。

http://tecbrat.blogspot.com/2013/03/recursive-function-to-find-substrings.html

于 2013-06-04T13:30:46.143 に答える
0

これが私のコードです。パフォーマンスに関しては最適ではありませんが、コードの芸術としては見栄えがします。

function cleanArray($a) 
{
    return is_array($a) ? array_map("cleanArray", $a) : "";
}
$b = array_map("cleanArray", $array);
于 2013-06-04T13:55:37.290 に答える
0

配列内をループして、キーを保持し、値を更新しながら反復しながら新しい配列を作成できると思いますNULL

$new_array = array();
foreach($array as $key => $data)
{
    $new_array[$key] = NULL;
    if(is_array($data))
    {
        foreach($data as $keys => $val)
        {
            $new_array[$key][$keys] = NULL;
        }
    }
}

var_dump($new_array);

これは出力されます

array (size=4)
  'id' => null
  'innerArray' => 
    array (size=1)
      'name' => null
  'name' => null
  'arryme' => 
    array (size=2)
      'id' => null
      'arraytarra' => null

ライブデモ

于 2013-06-04T13:36:43.297 に答える