6

次の機能があるとします

function setArray(&$array, $key, $value)
{
    $array[$key] = $value;     
}

上記の関数ではキーは1段目のみですが、2段目や3段目にキーを設定したい場合、関数をどのように書き換えればよいでしょうか?

例えば

 $array['foo']['bar'] = 'test';

同じ関数を使用して配列値を設定したい

4

5 に答える 5

15

これはうまくいくはずです。この関数を使用すると、次のように区切られたキーを含む単一の文字列を渡すことで、任意の深さの任意の配列要素を設定できます。.

function setArray(&$array, $keys, $value) {
  $keys = explode(".", $keys);
  $current = &$array;
  foreach($keys as $key) {
    $current = &$current[$key];
  }
  $current = $value;
}

これは次のように使用できます。

$array = Array();
setArray($array, "key", Array('value' => 2));
setArray($array, "key.test.value", 3);
print_r($array);

出力:

Array (
    [key] => Array
        (
            [value] => 2
            [test] => Array
                (
                    [value] => 3
                )

        )

)
于 2012-11-13T11:10:58.557 に答える
1

使用できますarray_merge_recursive

$array = array("A" => "B");
$new['foo']['bar'] = 'test';
setArray($array, $new);
var_dump($array);

出力

array (size=2)
  'A' => string 'B' (length=1)
  'foo' => 
    array (size=1)
      'bar' => string 'test' (length=4)

使用する機能

function setArray(&$array, $value) {
    $array = array_merge_recursive($array, $value);
}
于 2012-11-13T11:12:24.400 に答える
1

この関数はそれを行う必要があり、キーは配列である必要があります。たとえば、array('foo', 'bar')

function setArray(&$array, array $keys, $value) {
  foreach($keys as $key) {
    if(!isset($array[$key])) {
      $array[$key] = array();
    }
    $array = &$array[$key];
  }
  $array = $value;
}

$arr = array();
setArray($arr, array('first', 'second'), 1);
var_dump($arr);
// dumps array(1) { ["first"]=> array(1) { ["second"]=> int(1) } } 

テスト済みで動作します。

于 2012-11-13T11:23:57.810 に答える
-1

ちょうどこのような:

function setArray(&$array, $key1, $key2, $value)
{
    $array[$key1][$key2] = $value;     
}

しかし、なぜ関数を使いたいのでしょうか? 次のように使用します。

setArray($array, 'foo', 'bar', 'test');

次のようなものを書くには、より多くの時間がかかります。

$array[1][2] = 'test';
于 2012-11-13T11:08:30.520 に答える