dskld5423
2016-08-02 20:40
浏览 48
已采纳

PHP array_intersect / array_diff / combine数组

$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");

I need to be able merge these arrays together.So they look something like this. As I will need to loop thru the consolidated array. Other, Overview do not have any text values but still need to placed into the array.

$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 => "");

I have tried for loops (using count value), foreach loops, I thought array_intersect or array_diff don't see to solve the issue. This should not be so difficult, but I'm trying to piece together some really bad legacy code. Or the cube/florescent lights might have finally got to me.

Update:

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

and

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

$dstmt & $stmt are queries.

I thought this would work but not so much

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

Something like this Let me clarify:

$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条回答 默认 最新

  • doujiu8826 2016-08-02 22:26
    最佳回答

    If you want to work with these two arrays, you can just use the title as the key in $r.

    foreach (array_merge($arr, $info_arr) as $x) {
        $r[$x['title']]['title'] = $x['title'];
        $r[$x['title']]['text'] = isset($x['text']) ? $x['text'] : '';
    }
    

    Or, you can go back a step and avoid having separate arrays by building the $r array in the same manner as you fetch your query results:

    while ($stmt->fetch()) {
        $r[$Title] = array('title' => $Title, 'text' => '');
    }
    while ($dstmt->fetch()) {
        $r[$descriptionType] = array("title" => $descriptionType, "text" => $descriptionText);
    }
    

    Or, ideally, you could go back another step and avoid having separate queries by using a JOIN to get the same results in one query, but there's nothing in the question on which to base any specific suggestion for that.

    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题