0

繰り返しという名前の機能があります。

配列キー == 'repeat' の場合、配列値を繰り返したい

しかし、私の if ($k == 'repeat') 比較は失敗します。

私の比較の何が問題なのですか?

function repeat($schema, $repeat = array()){

    foreach($schema as $k => $v){

if($k == '繰り返し')

3 行目はリピート機能内で正しく動作しません。

$schema = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        'repeat' => array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => 'title',
            ),
            'key' => 'subject',
        )
    )
);

$repeat = array('Country Name' => 'Usa', 'City Name' => 'Newyork');

 // Recursive String Replace - recursive_array_replace(mixed, mixed, array);
function recursive_array_replace($find, $replace, $array){
    if (!is_array($array)){
        return str_replace($find, $replace, $array);
    }
    $newArray = array();
    foreach ($array as $key => $value) {
        $newArray[$key] = recursive_array_replace($find, $replace, $value);
    }
    return $newArray;
}


function repeat($schema, $repeat = array()){
    foreach($schema as $k => $v){
        if($k == 'repeat'){
            foreach($repeat as $rk => $rv){
                $value = recursive_array_replace('title', $rk, $v);
                $value = recursive_array_replace('subject', $rv, $value);
                $info[] = $value;
            }
        }
    }
    //$schema = recursive_array_replace('repeat', $repeat, $schema);
    return $info;
}

print_r(repeat($schema, $repeat));

更新1

スキーマは

$schema = array(
    'tag' => 'div',
    'class' => 'lines',
    array(
        'tag' => 'div',
        'class' => 'lines',
        'repeat' => array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => 'title',
            ),
            'key' => 'subject',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => 'title',
            ),
            'key' => 'subject',
        )
    )
);

更新 2

$schema = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        array(
            'tag' => 'div',
            'repeat' => array(
                'tag' => 'div',
                 array(
                    'tag' => 'span',
                    'style' => 'margin:10px; padding:10px',
                    'key' => 'title',
                ),
                'key' => 'subject',
            )
        )
    )
);
4

1 に答える 1

0

私の意見では、変数にキー$schemaがないため、コンパートメントは失敗します。'repeat'

foreach変数内のすべての項目を実行します$schemaが、(更新前) 項目は 1 つだけでした: 配列です。更新後、キー'tag'、を持つ 3 つのアイテムと、キー'class'を持たない 1 つの配列があるため、自動的に 0 が割り当てられます。

どちらの場合も'repeat'、( 経由で$schema[0]['repeat']) 配列の 0 番目の項目を参照することでキーに到達できます。

他にエラーがない場合(チェックしていません)、交換する必要があります

foreach($schema as $k => $v){

foreach($schema[0] as $k => $v){

これはネストされた配列を参照します。$schemaただし、配列内に他の数字キーがない場合に限ります。

これを確実にするために、たとえば、最初にどのアイテムが配列であるかを確認することができます。

foreach($schema as $item){ // this is only an auxiliary loop
  if(is_array($item)){
    $new_schema=$item;
    break;
  }
}

次に、メインループに移動します。

foreach($new_schema as $k => $v){

更新後 2

キーにアクセスするには、独自の方法を見つける必要があり'repeat'ます。これを繰り返し行うことができます。あなたのコードでは、「繰り返し」キーを持たない最初のレベルの間違った配列にアクセスしますが、さらに深くする必要があります。

于 2013-08-25T20:57:13.390 に答える