合并具有相同索引值的二维数组

时间:2018-10-30 15:43:20

标签: php

如何基于两个2d数组共享的唯一值将一个数组合并到另一个2d数组中?

数组:

$arr1 = [
    "First" =>[
        "Name" => "John",
        "Id" => 123
    ],
    "Second" =>[
        "Name" => "Peter",
        "Id" => 45
    ]
];  

$arr2 = [
    "First" =>[
        "Age" => 34,
        "Id" => 123
    ],
    "Second" =>[
        "Age" => 24,
        "Id" => 45
    ]
];

$n = array_merge($arr1, $arr2);

var_dump $ n时的当前输出:

array(2) {
 ["First"]=>
   array(2) {
    ["Age"]=>
    int(34)
    ["Id"]=>
    int(123)
 }
 ["Second"]=>
  array(2) {
    ["Age"]=>
    int(24)
    ["Id"]=>
    int(45)
 }
}

所需的输出:

array(2) {
 ["First"]=>
   array(2) {
    ["Name"]=>
    String("John")
    ["Age"]=>
    int(34)
    ["Id"]=>
    int(123)
 }
 ["Second"]=>
  array(2) {
    ["Name"]=>
    String("Peter")
    ["Age"]=>
    int(24)
    ["Id"]=>
    int(45)
 }
}

当然,仅通过合并两个数组就不能解决我的问题,但是我只是想知道我应该采用哪种方法来做到这一点。

1 个答案:

答案 0 :(得分:5)

假设数组的这种结构,可以使用array_replace_recursive

 <h:body>
<f:view transient="true">
  <tp:header/>
  <tp:searchForm/>



  <div id="results">

  </div>

 <h:panelGroup  id="dTable" class="container">
        </h:panelGroup>


</f:view>
   <f:view transient="true">
<div class="jobEntity">
  <div class="job-container-header">
    <h4>#{testBean.jobEntity.toString()}</h4>

    <c:if test="#{testBean.jobEntity.validURLConnection}">
      <a href="#{testBean.jobEntity.pGradeDescriptionLink}" 
         class="btn btn-info-One"   
         target="_blank">[ Test ]</a>
    </c:if>

    <h4>#{testBean.jobEntity.mu} - #{testBean.jobEntity.muDescription}</h4>
    <h4>#{testBean.jobEntity.specialNotes}</h4> 
    <h4>#{testBean.jobEntity.syRgeMnSepMsg}</h4>
  </div>

  <c:if test="${testBean.jobEntity.sectionToDisplay eq 'Range'}">
    <table class="table">
      <tbody>
        <tr>
          <th></th>
          <c:forEach var="stepNumber" begin="1" end="#{testBean.jobEntity.stepSize}">
            <th>Step #{stepNumber}</th>
          </c:forEach>
        </tr>
        <c:forEach items="#{testBean.jobEntity.jobRows}" var="jobRow">
          <tr>
            <th>#{jobRow.rateType}</th>
            <c:forEach items="#{jobRow.steps}" var="step">
              <td>#{step.amount}</td>
            </c:forEach>
          </tr>
        </c:forEach>
      </tbody>
    </table>
  </c:if>
</div>

提琴:https://3v4l.org/IPGsl

有人可以说您可以使用array_merge_recursive,但不能。由于两个数组中都有相同的键($n = array_replace_recursive($arr1, $arr2); ),因此生成的数组将没有您期望的结构。但是,如果两个数组中都有不同键-Id也是一个选择。