1

後で使用できるように、関数を使用して arraykey をレンダリングしたいと考えています。このようなことが可能かどうかさえわかりません。私が今持っている機能は次のようになります

function array_key_render($key){

        $result     = explode('.', $key);
        $num        = count($result);

        for($i=0;$i<$num;$i++){
            $array_key .= [$result[$i]];
        }

        return $array_key;

    }

主なアイデアは、ieを入力PRODUCT.PRIZEして、次のようなものを返したいということです

['製品']['賞品']

更新:つまり、数値キーを持つそのような配列がある場合:

Array
(
    [PRODUCT] => Array
        (
            [0] => Array
                (
                    [NAME] => jeans
                    [TITLE] => Blop
                    [PRIZE] => Array
                        (
                            [NEW] => 13.23€
                            [0] => 24,40€
                        )

                )

            [1] => Array
                (
                    [NAME] => Pullover
                    [TITLE] => OMG
                    [PRIZE] => Array
                        (
                            [0] => 13.23€
                            [NEW] => 24,40€
                        )

                )

        )

)

PRODUCT.PRIZE を選択すると、選択した回答で false が返されます。すべての数値キーを一致させるために、ある種のワイルドカードを作成するにはどうすればよいですか? PRODUCT.*.PRIZE のようなもの

全体は小さなテンプレートエンジン用です。私にいくつかの指針やヒントがあれば、それは素晴らしいことです。

4

6 に答える 6

2

関数は文字列を返すため、これは機能しませ

$a = array("PRODUCT" => array("PRICE" => 10.99)); 
$key = array_key_render("PRODUCT.PRICE");
echo $a[$key];

私はあなたがこれでどこに向かっているのかを見ることができます。

<PRE>
<?php

// Obtain an array of keys based on our dotted string
function array_key_render($key)
{
  $result = explode('.', $key);

  return $result;

}

// iterate over the array using the known keys trying to find the right element
function array_access($key, $_array)
{
    $array = $_array;
    $keys = array_key_render($key);

    $found_keys = 0;

    foreach($keys as $k)
    {
        if(isset($array[$k]))
        {
            $array = $array[$k];
            $found_keys++;
        }
        // Oh no, we are lost, break, the keys were not found
        else
        {
            break;
        }
    }

    // Check that we found all the keys we were looking for
    if($found_keys == count($keys))
        return $array;

    return false;
}

$a = array("PRODUCT" => array("PRICE" => 10.99)); 

$key = "PRODUCT.PRICE";

var_dump(array_access($key, $a));

$key = "PRODUCT.NOWAY";

var_dump(array_access($key, $a));

$a = array("PRODUCT" => array("PRIZE" => "REP"));

$key = "PRODUCT.PRIZE";

var_dump(array_access($key, $a));
于 2013-07-19T21:04:43.233 に答える
1

簡単な解決策として、$result 配列の最後の要素から始めて、それを $array インデックスに追加します。

$array = $value;
for($i=$num-1;$i>=0;$i--){
            $array[$result[$i]] = $array;
}

したがって、入力が PRODUCT.PRIZE.BLA1.BLA2 の場合、出力は $array[PRODUCT][PRIZE][BLA1][BLA2] になります。

于 2013-07-19T21:04:50.583 に答える
1

私はこのコードをテストしていないので、最初に試してみてください。とにかく: まず最初に、for ループを次のように変更します。

for($i=0;$i<$num;$i++){
  $array_key .= "[" . $result[$i] ."]";
}

変数の文字列表現を取得したら、生成された文字列に対して eval( ) を呼び出すことができます。ほとんどのテンプレート エンジンは eval を使用しますが、多くのセキュリティ上の問題に注意してください。

于 2013-07-19T20:59:41.397 に答える
0

これを試して

function array_key_render($key){

        $result     = explode('.', $key);
        $num        = count($result);
        $arr = array();

        for($i=0;$i<$num;$i++){
            $arr[$result[$i]] = array("price" => $i);
        }

    }

あなたの $key はこのようなものだと思います。「1.2.3.4.5」

参考:テストされておらず、何をしようとしているのかよくわかりません...これが役に立てば幸いです

于 2013-07-19T20:58:25.977 に答える