4

正規表現で見つかった一致の数に等しい深さで、多次元配列を生成しようとしています。各一致の文字列値となる配列キー。

例えば:

preg_match('/([A-Z])\-?([0-9])\-?([0-9]{1,3})/i', 'A-1-001', $matches);

戻り値:

Array (
   [0] => A-1-001
   [1] => A
   [2] => 1
   [3] => 001
)

変換したいもの:

$foo = array(
    'A' => array(
        '1' => array(
            '001' => array('some', 'information')
        )
    )
);

次のような別の多次元配列とマージできるようにします。

$bar['A']['1']['001'] = array('some', 'other', 'information');

プロセスは、任意の数の一致/ディメンションを処理する必要があります。


以下は私の現在のアプローチです。この試みは私の目標をはるかに下回っているため、概念を理解できていません。

$foo = array();
$j = count($matches);

for ($i = 1; $i < $j; $i++) {
    $foo[ $matches[$i - 1] ] = $matches[$i];
}

/*
  $foo's structure becomes:
  Array (
      [A-1-001] => A
      [A] => 1
      [1] => 001
  )
*/

配列キーを交換するだけで、必要な新しい子配列を作成しません。


任意の提案や解決策をいただければ幸いです。ありがとう!

4

4 に答える 4

1

これは、いくつかの方法で行うことができます。たとえば、再帰を使用します。今、頭の中に別の考えがありました。で配列を反転しarray_reverseます。このようにして、後ろから前に構築することができます。

そして、すべてをセットアップできます。したがって、コードは次のようになります

$foo = array();
$reversed = array_reverse($matches);
$some_info_array = array('some', 'information');

foreach($reversed as $key) {
    if(empty($foo)) {
        $foo[$key] = $some_info_array;
    } else {
        $foo[$key] = $foo;
    }
}

コードはテストされていませんが、nive のアイデア/開始を提供する必要があります

于 2013-06-04T18:37:09.780 に答える