【问题标题】:How can I use array_replace inside foreach loop?如何在 foreach 循环中使用 array_replace?
【发布时间】:2019-07-18 21:02:37
【问题描述】:

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

【问题讨论】:

  • $columns_arr[] = (array_replace($input,$replace));
  • @Fabian 你的建议给了我输出array:6 [▼ 0 => "id" 1 => "name" 2 => "productgroup" 3 => "category" 4 => array:4 [▼ 0 => "id" 1 => "name" 2 => "productgroup.name" 3 => "category" ] 5 => array:4 [▼ 0 => "id" 1 => "name" 2 => "productgroup" 3 => "category.name" ] ]
  • 看我的回答

标签: arrays loops symfony search replace


【解决方案1】:
foreach ($fields as $key => $field) {
    $MappedBy = isset($field['mappedBy']);
      if($MappedBy != true){
        $columns_arr[$key] = $field['fieldName'].".name";
    }
  }

您需要像这样覆盖数组的正确键。

【讨论】:

  • 我测试过。输出为:array:4 [▼ 0 => "id" 1 => "name" 2 => array:4 [▼ 0 => "id" 1 => "name" 2 => "productgroup.name" 3 => "category" ] 3 => array:4 [▼ 0 => "id" 1 => "name" 2 => "productgroup" 3 => "category.name" ] ]
  • 现在输出是:array:6 [▼ 0 => "id" 1 => "name" 2 => "productgroup" 3 => "category" "productgroup" => "productgroup.name" "category" => "category.name" ]
  • $input 是什么?
  • $input = array_keys($columns);
  • 太难了,我只是尝试在foreach ($fields as $field) { $columns_arr[array_search($field, $columns_arr)] = 'test'; } 进行此测试,我希望所有值都将变为test。但只有id 被替换...
【解决方案2】:

我无法真正回答你的问题,有点不清楚你在做什么以及你的值来自哪里等等。所以我尝试重建你的数组,这就是我在不使用 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" }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 2019-11-21
    • 2023-03-27
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多