用数组替换PHP关联数组值(字符串)


Replacing PHP associative array value (string) with an array

我想将'BLOCKS'数组中的'baz'值替换为'baz'数组中标题匹配的数组。

我试过分解BLOCKS['baz'],然后循环遍历结果并执行str_replace,但没有成功。我相信还有一个更简洁直接的解决方案。

请参阅底部的"期望输出",了解我正在努力实现的目标。非常感谢!

    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)
            )              
          );

试试这个:

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];
        }
    } 
}