Как я могу использовать array_replace внутри цикла foreach? - PullRequest
0 голосов
/ 25 февраля 2019

colums_arr:

array:4 [▼
  0 => "id"
  1 => "name"
  2 => "productgroup"
  3 => "category"
]

поля:

    {#9767 ▼
  +"id": array:9 [▶]
  +"name": array:8 [▼
    "fieldName" => "name"
  ]
  +"productgroup": array:19 [▼
    "fieldName" => "productgroup"
    "mappedBy" => null
  ]
  +"category": array:19 [▼
    "fieldName" => "category"
    "mappedBy" => null
  ]
}

Что я хочу сделать, так это то, что когда fields mappedBy существует для элемента, я хочу добавить nameк стоимости.В результате columns_arr должен выглядеть следующим образом:

array:4 [▼
  0 => "id"
  1 => "name"
  2 => "productgroup.name"
  3 => "category.name"
]

Это мой подход:

  foreach ($fields as $field) {
      $MappedBy = isset($field['mappedBy']);
        if($MappedBy != true){
          $class_field = $field['fieldName'];
          $key = array_search($field['fieldName'],$input);
          $replace=array($key=>$class_field.".name");
          $columns_arr = (array_replace($input,$replace));
      }
    }

Проблема в том, что мой результат сейчас:

array:4 [▼
  0 => "id"
  1 => "name"
  2 => "productgroup"
  3 => "category.name"
]

Почему name не добавлено к productgroup?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я не мог ответить на ваш вопрос, немного неясно, что вы делаете, откуда берутся ваши значения и т. Д., Поэтому я попытался восстановить ваши массивы, и это то, что я получил без использования array_search:

<?php

$columns = array(0 => "id", 1 => "name", 2 => "productgroup", 3 => "category");

$fields = array("id" => 9, "name" => array("fieldName" => "name"), "productgroup" => array("fieldName" => "productgroup", "mappedBy" => null), "category" => array("fieldname" => "category", "mappedBy" => null));
foreach ($fields as $key => $field) {
    if($key !== "id" && $key !== "name"){
        if(!isset($field['mappedBy'])){
            foreach($columns as $ckey => $column){
                if($column === $key){
                    $columns[$ckey] = $column.".name";
                }
            }
        }
    }
}

var_dump($columns);

Выводы var_dump:

array(4) { [0]=> string(2) "id" [1]=> string(4) "name" [2]=> string(17) "productgroup.name" [3]=> string(13) "category.name" }
0 голосов
/ 25 февраля 2019
foreach ($fields as $key => $field) {
    $MappedBy = isset($field['mappedBy']);
      if($MappedBy != true){
        $columns_arr[$key] = $field['fieldName'].".name";
    }
  }

Вам нужно перезаписать правильный ключ вашего массива следующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...