PHP array_intersect / array_diff / combine array

时间:2016-08-02 20:40:05

标签: php arrays

$arr[] = array('title' => 'Overview');
$arr[] =array('title' => 'General');
$arr[] =array('title' => 'History');
$arr[] =array('title' => 'Construction');
$arr[] =array('title' => 'Plan');
$arr[] =array('title' => 'Other');

$info_arr[] = array("title" => "General", text => "value1");
$info_arr[] = array("title" => "History", text => "value1");
$info_arr[] = array("title" => "Construction", text => "value1");
$info_arr[] = array("title" => "Plan", text => "value1");

我需要能够将这些数组合并在一起。所以它们看起来像这样。因为我需要循环整合数组。 其他,概述没有任何文本值,但仍需要放入数组中。

$new_arr[] = array("title" => "General", text => "value1", "title" => "History", text => "value1", "title" => "Construction", text => "value1"
,"title" => "Plan", text => "value1","title" => "Overview", text => "","title" => "Other", text => "");

我试过for循环(使用计数值),foreach循环,我认为array_intersect或array_diff没有看到解决问题。这应该不是那么困难,但我试图将一些非常糟糕的遗留代码拼凑在一起。或者立方体/荧光灯可能终于找到了我。

更新

 while ($stmt->fetch()) {
    $arr[] = array("title" => $Title);
}

while ($dstmt->fetch()) {
   $info_arr[] = array("title" => $descriptionType, "descriptiontext" => $descriptionText); , "descriptiontext" => $val );
      }

$ dstmt& $ stmt是查询。

我认为这样可行但不是那么多

$r = array_intersect($arr, $info_arr);
var_dump($r);

像这样的东西让我澄清一下:

$new_arr = array(array("title" => "General", text => "value1"),
    array("title" => "History", text => "value1"),
    array("title" => "Construction", text => "value1"),
    array("title" => "Plan", text => "value1"),
    array("title" => "Overview", text => ""),
    array("title" => "Other", text => "")
);

2 个答案:

答案 0 :(得分:1)

如果您想使用这两个数组,可以使用标题作为txtApplID中的键。

$r

或者,您可以通过以与获取查询结果相同的方式构建foreach (array_merge($arr, $info_arr) as $x) { $r[$x['title']]['title'] = $x['title']; $r[$x['title']]['text'] = isset($x['text']) ? $x['text'] : ''; } 数组,返回一步并避免使用单独的数组:

$r

或者,理想情况下,您可以返回另一个步骤,避免通过使用while ($stmt->fetch()) { $r[$Title] = array('title' => $Title, 'text' => ''); } while ($dstmt->fetch()) { $r[$descriptionType] = array("title" => $descriptionType, "text" => $descriptionText); } 在一个查询中获得相同结果来进行单独查询,但问题中没有任何内容可以根据该问题提出任何具体建议

答案 1 :(得分:0)

正如评论中所述,您要求的确切$new_arr是不可能的。但是,我认为这会给你一个类似的结果,应该适用于你的目的:

foreach ($info_arr as $infoArray) {
    $found = array_search(array('title' => $infoArray['title']), $arr);
    if (false !== false) {
        unset($arr[$found]);
    }
}
$new_arr = array_merge($info_arr, $arr);

它的工作原理是删除"重复"在执行$arr之前,从原来的array_merge()开始。

如果为text中的其余项添加空$arr值非常重要,请在array_merge()之前执行此操作:

foreach ($arr as &$arrArray) {
    $arrArray['text'] = '';
}

结果数组如下所示:

$new_arr[] = array(
    array(
        'title' => 'General', 
        'text' => 'value1', 
    ),
    array(
        'title' => 'History', 
        'text' => 'value1', 
    ),
    array(
        'title' => 'Construction', 
        'text' => 'value1',
    ),
    array(
        'title' => 'Plan', 
        'text' => 'value1',
    ),
    array(
        'title' => 'Overview', 
        'text' => '',
    ),
    array(
        'title' => 'Other', 
        'text' => '',
    ),
);