2016-08-02 2 views
0
$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"); 

これらの配列を結合する必要があります。このように見えます。統合された配列をループする必要があります。 その他、概要にはテキスト値はありませんが、配列に配置する必要があります。PHP array_intersect/array_diff/combine 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 => ""); 

は、私は(カウント値を使用して)ループ、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 => "") 
); 
+0

コードを表示します。 –

+1

'title 'は重複しているので、' $ new_arr [] = array( "title" => "General"、text => "value1"、 "title" => 'は動作しません。 – ArtisticPhoenix

+0

あなたの '何かのようなもの'は間違っています、不可能な配列です。質問を編集して、実際に何を望みますかを示します。必要がある場合は、配列を手動で構築します。 – alzee

答えて

1

あなたの場合これらの2つの配列で作業したい場合は、$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); 
} 

または、理想的に、あなたが行くことができます別のステップをもう一度行い、JOINを使用して1つのクエリで同じ結果を得ることによって別のクエリを使用することは避けてください。

+0

私は実際にPHPの答えを実装していませんでした。私が最初に抱えていた問題は、2つのクエリを使用していたので、PHPでそれらを並べ替えることでした。しかし、@ Don'tPanicの答えに基づいて、それはSQLクエリの問題を解決する方が良かった。私はJOINを使用していましたが、UNIONと組み合わせました。 – Chad

0

コメントで述べたように、正確な$new_arrをあなたはISNを要求しています可能です。それはarray_merge()を行う前に、元の$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); 

:しかし、私はこれはあなたの目的のために働く必要があり、同様の結果が得られますね。

それはarray_merge()前にこれを行う、$arr内の残りの項目の空のtext値を追加することが重要です場合:

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' => '', 
    ), 
);