2012-03-07 83 views
0

我想用'BAZ'数组中的数组替换'BLOCKS'数组中的'baz'值,这些数组的标题匹配。用数组替换PHP关联数组值(字符串)

我试过爆炸BLOCKS ['baz'],然后循环遍历结果,并做一个str_replace无济于事。我确信有一个更简洁和直接的解决方案。

请参阅我想要完成的底部的DESIRED OUTPUT。非常感谢!

BLOCKS 

    array 
     0 => 
     array 
      'foo' => string 'block1' (length=6) 
      'bar' => string '/uploads/commercial/pdf.pdf' (length=27) 
      'baz' => string '372|371' (length=7) 
     1 => 
     array 
      'foo' => string 'block2' (length=6) 
      'bar' => string '/uploads/commercial/pdf.pdf' (length=27) 
      'baz' => string '371' (length=3) 

    BAZ 

    array 
     372 => 
     array 
      'wibble' => string 'building2' (length=9) 
      'wobble' => int 235000 
      'wubble' => string 'office|medical' (length=14) 
     371 => 
     array 
      'wibble' => string 'building1' (length=9) 
      'wobble' => int 252000 
      'wubble' => string 'office' (length=6) 

    DESIRED OUTPUT 

    array 
     0 => 
     array 
      'foo' => 'block1' 
      'bar' => '/uploads/commercial/pdf.pdf' 
      'baz' => array(
      372 => 
       array 
       'wibble' => string 'building2' (length=9) 
       'wobble' => int 235000 
       'wubble' => string 'office|medical' (length=14) 
      371 => 
       array 
       'wibble' => string 'building1' (length=9) 
       'wobble' => int 252000 
       'wubble' => string 'office' (length=6) 
      ); 

     1 => 
     array 
      'foo' => string 'block2' (length=6) 
      'bar' => string '/uploads/commercial/pdf.pdf' (length=27) 
      'baz' => array(
      371 => 
       array 
       'wibble' => string 'building1' (length=9) 
       'wobble' => int 252000 
       'wubble' => string 'office' (length=6) 
      )    
     ); 
+0

请新增到目前为止你已经尝试了代码开发高级。 – Marc 2012-03-07 00:46:43

回答

1

试试这个:

foreach ($blocks as &$block) { 

    $bazIds = explode('|', $block['baz']); 

    unset($block['baz']); // Keep it clean 

    foreach ($bazIds as $bazId) { 

     if (array_key_exists($bazId, $baz) { 
      $block['baz'][$bazId] = $baz[$bazId]; 
     } 
    } 
} 
+0

谢谢迈克,这就是我以后的样子。根据我的需求创建我所需要的更清洁,而不是直接替换它。 – juddlyon 2012-03-07 23:58:25

+0

对不起,S.O.相当新颖。并无法弄清楚如何接受它。他们不会在任何地方记录支票图标! – juddlyon 2012-03-12 16:28:19

0

可以使用的foreach遍历数组和检查的关键。如果你找到的期望键然后将值类似下面的代码

foreach($BLOCKS as $key -> $value){ 
    if(is_array($value){ 
     foreach($BLOCKS[$key] as $key1 -> $value){ 
      if($key1=='baz'){ 
       //logic here for string split using token | and create a new array from value 
       // You need to put $$ for using value as variable. 
      } 
     } 
    } 
} 

用户在雀鳝的盈富泰克http://garsinfotech.com