2016-05-30 9 views
1

私は配列を持っており、それを変更する必要があります。私の配列の各要素は複数の要素を持ち、そのうちのいくつかは配列でもあることがわかります。私がする必要がどのような多次元配列の要素をどのように動かすことができますか?

Array 
(
    [ordered] => Array 
     (
      [label] => Order ordered      
      [next_states] => Array 
       (
        [deliver] => Array 
         (
          [target] => delivered 
         )  
       )  
      [status] => complete 
     ) 

[delivered] => Array 
    (
     [label] => Order delivered      
     [next_states] => Array 
      (
       [check_invoice] => Array 
        (
         [target] => invoice_correct 
        )  
      )  
     [status] => complete 
    ) 

[invoice_paid] => Array 
    (
     [label] => Invoice paid      
     [next_states] => 
     [status] => disabled 
    )  
) 

は私のメインアレイから各要素から要素[next_states]を取ると、次の要素に追加することです。実際にはkeys[next_states]の中に入れて、配列全体から次の要素の新しいキー([next_step])に追加するだけです。

例;

Array 
(
    [ordered] => Array 
     (
      [label] => Order ordered      
      [next_states] => Array 
       (
        [deliver] => Array 
         (
          [target] => delivered 
         )  
       )  
      [status] => complete 
      [next_step] => //This first one can remain empty because it's the first one. 
    ) 

[delivered] => Array 
    (
     [label] => Order delivered      
     [next_states] => Array 
      (
       [check_invoice] => Array 
        (
         [target] => invoice_correct 
        )  
      )  
     [status] => complete 
     [next_step] => deliver // <- HERE 
    ) 

[invoice_paid] => Array 
    (
     [label] => Invoice paid      
     [next_states] => 
     [status] => disabled 
     [next_step] => check_invoice // <- HERE 
    )  
) 

私の質問がはっきりしていて、誰かが私を助けてくれることを願っています。私は既に各要素に[status]を追加するforeachループを持っています。

foreach ($steps as $key => $value) { 
    $steps[$key]['next_step'] = prev($steps); 
    if ($key === $nextStep) { 
     $steps[$key]['status'] = 'active'; 
    } elseif (isset($uncompletedSteps[$key])) { 
     $steps[$key]['status'] = 'disabled'; 
    } else { 
     $steps[$key]['status'] = 'complete'; 
    } 
} 

私は上記のforeachループに何かを追加する必要があることを知っていますが、これを行う方法はわかりません。誰かが私にこれを行う方法を教えてもらえますか?メインアレイ内の位置を検索するために使用される配列を作成するための

答えて

0

使用array_keys:

$keys = array_keys($step); 
// Test that array has more than one element 
if (($klen = count($keys)) < 2) die("illegal lenth of the array"); 

for($i = 0; $i < $klen-1; $i++) 
    // Test that current element has next_states key 
    // and it points to array 
    if(isset($steps[$keys[$i]]['next_states']) && is_array($steps[$keys[$i]]['next_states'])) 
     // Put key in next element 
     $steps[$keys[$i+1]]['next_step'] = key($steps[$keys[$i]]['next_states']); 
+0

あなたの答えは素晴らしい作品、ありがとうございます! –

+0

喜んで助けることができます。がんばろう! – splash58

関連する問題