Замена значения ассоциативного массива PHP (строки) на массив - PullRequest
0 голосов
/ 07 марта 2012

Я хотел бы заменить значения 'baz' в массиве 'BLOCKS' на массивы в массиве '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)
            )              
          );

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Попробуйте это:

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 голосов
/ 07 марта 2012

Вы можете просмотреть массив с помощью 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.
            }
        }
    }
}

Пользователь - старший разработчик в Gar's Infotech http://garsinfotech.com

...