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

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.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • duanjuebin2519 2016-08-02 21:06

    As stated in the comments, the exact $new_arr you're requesting isn't possible. However, I think this will give you a similar result that should work for your purposes:

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

    It works by removing the "duplicates" from the original $arr before doing the array_merge().

    If it's important to add an empty text value for the remaining items in $arr, do this before the array_merge():

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

    The resulting array will look like this:

    $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' => '',
        ),
    );
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题