2013-08-25 41 views
0

我有一個名稱重複的函數。數組比較索引名稱失敗/如何比較數組的索引名稱

我想重複數組值,如果數組鍵== '重複'

但是我如果($滿足K == '重複')comparement失敗。

我的比較有什麼問題?

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

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

如果($滿足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)); 

UPDATE1

架構可能是

$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', 
     ) 
    ) 
); 

更新,因爲你的$schema變量沒有'repeat'鍵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', 
      ) 
     ) 
    ) 
); 
+0

您的$ schema是嵌套數組。你應該修改它或迭代'$ schema [0]的'foreach'' – Voitcus

+0

$ schema沒有固定值,總是可以改變。 $ schema [0]可能會失敗其他情況。我需要比較索引名稱的值 –

+0

您可以檢查'is_array($ schema [0])',如果true將'$ schema'(您的本地變量)賦值給'$ schema [0]'。 – Voitcus

回答

0

在我看來艙失敗。

你做foreach$schema變量的所有項目,但是(更新前)只有一個項目:數組。更新後有三個項目,其鍵'tag''class',並沒有密鑰一個數組,所以它會自動分配到0

在這兩種情況下,你可以參照第0項達到'repeat'關鍵(通過$schema[0]['repeat'])。

如果沒有其他錯誤(我沒有檢查),則應更換

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'關鍵。你可以反覆做這個。在你的代碼中,你訪問錯誤的數組,第一級,它沒有「重複」鍵,但你應該更深入。

+0

我該如何迭代執行此操作?你能多解釋一下嗎? –

+0

array_keys(),in_array(),沒有解決我的情況。 –

+0

而不是重複'repeat'函數爲什麼你不能找到''repeat''鍵?這是你唯一使用的一個。在[manual](http://php.net/manual/en/function.array-keys.php)中有很多在多維數組中找到特定鍵的例子。檢查還[StackOverflow](http://stackoverflow.com/q/8940825/2088851) – Voitcus