2017-11-06 15 views
0

このassoc配列をどのように配列(タイトル、説明)を持つものにマージできますか? GetContent関数のデータを自分の要件に合わせて並べ替えます。 foreachの結果の複数の連想配列を1つにマージする方法は?

function getContent($data) { 
     $tabs = $data->result->data->tab;  
     $type = findByType($tabs,'content'); 
      $content = array(); 
      foreach ($type->unified_content->item as $item) { 
       if($item->type->name == 'header') { 
        $content[] = array(
         'title' => $item->text 
        ); 
       } else { 
        $content[] = array(
         'description' => $item->text 
        ); 
       } 
      } 
      return $content;   
    } 

vardump、どのように私はタイトル+説明をマージすることができます

array(1) { 
    ["title"]=> 
    string(13) "Test článku" 
} 
array(1) { 
    ["description"]=> 
    string(20) "Nový článek test." 
} 
array(1) { 
    ["title"]=> 
    string(15) "Test článku 2" 
} 
array(1) { 
    ["description"]=> 
    string(22) "Nový článek test 2." 
} 
array(1) { 
    ["title"]=> 
    string(15) "Test článku 3" 
} 
array(1) { 
    ["description"]=> 
    string(22) "Nový článek test 3." 
} 
+0

マージする2つの配列を表示しますか? – Mark

+0

[PHP:2つの配列をマージして再インデックス化するのではなく、キーを保持しますか?](https://stackoverflow.com/questions/3292044/php-merge-two-arrays-while-keeping-keys-instead-of-reindexing ) – kabanus

+0

良い古い配列 '+'演算子を忘れないでください。 – biziclop

答えて

1

として

をarray_mergeすることができます、temp配列を使用してtitledescriptionをこのように格納することができます、

foreach ($type->unified_content->item as $item) { 
    if($item->type->name == 'header') { 
     $arr = []; 
     $arr['title'] = $item->text; 
    } else { 
     $arr['description'] = $item->text; 
     $content[] = $arr; 
    } 
} 

そうでない場合、配列をマージする必要があります。

+0

ありがとう) – David

0

あなたがコンテンツ厳密な順序を持っている場合は、ユーザーなど

foreach ($type->unified_content->item as $item) { 
       if($item->type->name == 'header') { 
        $content = array_merge($content,array(
         'title' => $item->text 
        )); 
       } else { 
        $content = array_merge($content,array(
         'description' => $item->text 
        )); 
       } 
      } 
+0

結果が最後の配列であるため、その悪い:string(15) "Testčlánku3" string(22) "Novýčlánektest 3" – David

0

あなたは1列にタイトル説明を保存し、あなたの$コンテンツ配列に渡すことができます。

これを置き換えます。これにより

foreach ($type->unified_content->item as $item) { 
    if($item->type->name == 'header') { 
     $content[] = array(
      'title' => $item->text 
     ); 
    } else { 
     $content[] = array(
      'description' => $item->text 
     ); 
    } 
} 

$i = 0; 
$content_temp = array(); 
foreach ($type->unified_content->item as $item) { 
    if($item->type->name == 'header') { 
     $content_temp['title'] = $item->text; 
    } else { 
     $content_temp['description'] = $item->text 
    } 
    $i++; 
    if($i % 2 == 0){ 
     $content[] = $content_temp; 
    } 
} 

コード全体:

function getContent($data) { 
    $tabs = $data->result->data->tab;  
    $type = findByType($tabs,'content'); 
    $content = array(); 
    $i = 0; 
    $content_temp = array(); 
    foreach ($type->unified_content->item as $item) { 
     if($item->type->name == 'header') { 
      $content_temp['title'] = $item->text; 
     } else { 
      $content_temp['description'] = $item->text 
     } 
     $i++; 
     if($i % 2 == 0){ 
      $content[] = $content_temp; 
     } 
    } 
    return $content;   
} 
0

array_me rge()はより効率的ですが、いくつかのオプションがあります。

$array1 = array("id1" => "value1"); 

$array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4"); 

$array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/); 
$array4 = $array1 + $array2; 

echo '<pre>'; 
var_dump($array3); 
var_dump($array4); 
echo '</pre>'; 
関連する問題