0

私は配列を取りたいと思います:

array("one", "two", "three");

次のように、配列の配列にします。

$someArray["one"]["two"]["three"];

配列の配列 ( $someArray) は、最初の配列がによって作成されるため、ある種のループによって作成する必要があるため、explode()どのくらい深いかわかりません$someArray

お時間をいただきありがとうございます。

私は今それを自分で読んでいますが、array_map()これでうまくいくでしょうか?

4

4 に答える 4

4

あなたはこれを行うことができます:

$path = array("one", "two", "three");
$ref = &$arr;
foreach ($path as $key) {
    if (!isset($ref[$key])) break;
    $ref = &$ref[$key];
}

最後に、それが存在するかどうか$refへの参照が$arr['one']['two']['three']あります。に置き換えると、代わりにその構造で配列を作成しますbreak$ref[$key] = array()

于 2010-11-19T13:42:45.597 に答える
1

array_reduceを使用する必要があります。解決策は非常に簡単です。

このトリックを行うには、配列を逆にしてから、リダクションを適用します。

$a = array('a','b','c');
$x = array_reduce(array_reverse($a), function ($r, $c) {
        return array($c=>$r);
     },array());

拡張および説明されたバージョンを編集します。

PHP には、配列を自動的に深く掘り下げる関数はありませんが、そうではありません。下から始めると、単純な割り当てで配列を前の配列に囲むことができます。

$a = array('a','b','c');
$result=array(); // initially the accumulator is empty
$result = array_reduce(
    array_reverse($a), 
    function ($partialResult, $currentElement) {
        /* enclose the partially computed result into a key of a new array */
        $partialResult = array($currentElement=>$partialResult); 
        return $partialResult;
    }, 
    $result
);

ちなみに私は短い方が好きです。これは機能的な慣用句であり、中程度の経験を積んだ開発者 (機能的なバックグラウンドが少しある) にはこれ以上説明する必要はないと思います。2番目のものは多くのノイズを追加します。学習には適していますが、本番コードへの注意散漫の原因になります(明らかに、 return ステートメントだけで関数を参照しています)。

于 2010-11-19T13:52:28.037 に答える
0
$arrNew = array();
$ref = &$arrNew;
$arrParts = array("one", "two", "three");

foreach($arrParts as $arrPart){

   $ref[$arrPart] = array(); 
   $ref = &$ref[$arrPart];
}

$arrNew を印刷すると、これが印刷されます。

Array
(
    [one] => Array
        (
            [two] => Array
            (
                [three] => Array
                    (
                    )

            )

    )

)

于 2010-11-19T13:58:36.133 に答える
0

なぜこれが欲しいのかわかりません。

でもでもあなたの望みの根拠はこうなる

$numbers = array("one", "two", "three");

$array = array();
$pointer = &$array;

$last_val = NULL;

foreach($numbers as $key => $val){
     if(!empty($pointer[$last_val])){
         $pointer = &$pointer[$last_val];
         $pointer = new array($val);
         $last_val = $val;
     }else{
         $pointer = new array($val);
         $last_val = $val;
     }
}

これにより、$array; に必要なものが正しくなります。

これはテストされていませんが、それが何をしているのかを教えてくれなければうまくいくと思います。

于 2010-11-19T13:51:43.400 に答える