1

これがすでに尋ねられている場合は、事前にお詫びしたいと思います。これが何と呼ばれるか正確にはわかりません。


フォームから MongoDB データベースにデータを保存しています。ソートを容易にするために、定義済みのキーと値のペアを作成したいと考えています。

このコードを使用すると、1 次元配列でこれを行うことができますが、多次元配列では機能しません。

/* $array = The array */
$new_array = array();

foreach ($array as $key => $value) {
    array_push($new_array, array(
        'name' => $key,
        'value' => $value
    ));
}

例:

入力配列:

Array
(
    [email] => test@mail.com
    [name] => John
    [sports] => Array
        (
            [outdoor] => Array
                (
                    [0] => Football
                    [1] => Baseball
                )

            [indoor] => Array
                (
                    [0] => Basketball
                    [1] => Hockey
                )
        )
)

出力配列:

Array
(
    [0] => Array
        (
            [name] => email
            [value] => test@mail.com
        )

    [1] => Array
        (
            [name] => name
            [value] => John
        )

    [2] => Array
        (
            [name] => sports
            [value] => Array
                (
                    [outdoor] => Array
                        (
                            [0] => Football
                            [1] => Baseball
                        )

                    [indoor] => Array
                        (
                            [0] => Basketball
                            [1] => Hockey
                        )
                )
        )
)

スポーツ値配列で停止し、その中の配列を変更していないことに注目してください。その中のすべての配列でこのパターンを継続するにはどうすればよいですか?

4

3 に答える 3

3

再帰を使用できます:

function keyValue($array){
  $new_array = array();

  foreach ($array as $key => $value) {
      array_push($new_array, array(
          'name' => $key,
          'value' => is_array($value) ? keyValue($value) : $value
      ));
  }

  return $new_array;
}
于 2013-05-25T21:25:28.720 に答える
2

これを試着してサイズを確認してください:

$array = array(
    'email' => 'test@email.com',
    'name' => 'John',
    'sport' => array('Soccor', 'Hockey')
);

$func = function($value, $key) {

     $return = array();
     $return['name'] = $key;
     $return['value'] = $value;


    return $return;
};

$parsed = array_map($func, $array, array_keys($array));

私にとって、これは次のように返されました:

   array(3) {
  [0]=>
  array(2) {
    ["name"]=>
    string(5) "email"
    ["value"]=>
    string(14) "test@email.com"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(4) "name"
    ["value"]=>
    string(4) "John"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(5) "sport"
    ["value"]=>
    array(2) {
      ["outdoor"]=>
      array(2) {
        [0]=>
        string(8) "Football"
        [1]=>
        string(8) "Baseball"
      }
      ["indoor"]=>
      array(2) {
        [0]=>
        string(10) "Basketball"
        [1]=>
        string(6) "Hockey"
      }
    }
  }
}
于 2013-05-25T21:16:17.713 に答える
0

ネイティブのデータ型 (int、float、bool) を維持しながら、連想配列を JSON オブジェクト (StdClass) に、またはその逆に変換するのは非常に簡単です。これが私の試みです:

キー値配列へ

function toKeyValue($values)
{
    $result = [];

    foreach ($values as $key => $value)
    {
        if (is_array($value)) {
            $result[$key] = toKeyValue($value);
        } elseif (is_object($value)) {
            $result[$key] = toKeyValue((array) $value);
        } else {
            $result[$key] = $value;
        }
    }

    return $result;
}

JSONオブジェクトへ

function toJson($values)
{
   return json_decode(json_encode($values));
}

$values常に配列でなければなりません。

于 2015-02-07T11:13:35.110 に答える