2016-11-25 11 views
2

以下、私は2つのPHP配列を持っています。 $all_tags$list_tags2番目の配列に一致するIDのキー/値がPHPである場合に配列にデータを追加します

Iは$all_tagsアレイを反復と$list_tagsアレイにおいて同じIDと一致する配列項目を有する$all_tagsにおける各配列項目にキー/値'class' => 'added'を追加する必要があります。その下に、このサンプルデータで

addedの値classという名前のキーを有するであろう1,2、及び5のid値と$all_tags配列内のアイテムを意味します。

... 
foreach ($all_tags as &$v) { 
    if (in_array($v, $list_tags)) { 
     $v['class'] = 'added'; 
    } 
} 

print_r($all_tags); 

出力:in_array機能を定期的にforeachループを使用するのに十分だろうあなたの単純なケースで

$all_tags = array(); 

$all_tags[] = array(
    'id' => 1, 
    'title' => 'title 1', 
    'description' => 'description 1' 
); 
$all_tags[] = array(
    'id' => 2, 
    'title' => 'title 2', 
    'description' => 'description 2' 
); 
$all_tags[] = array(
    'id' => 3, 
    'title' => 'title 3', 
    'description' => 'description 3' 
); 
$all_tags[] = array(
    'id' => 4, 
    'title' => 'title 4', 
    'description' => 'description 4' 
); 
$all_tags[] = array(
    'id' => 5, 
    'title' => 'title 5', 
    'description' => 'description 5' 
); 



$list_tags = array(); 
$list_tags[] = array(
    'id' => 1, 
    'title' => 'title 1', 
    'description' => 'description 1' 
); 
$list_tags[] = array(
    'id' => 2, 
    'title' => 'title 2', 
    'description' => 'description 2' 
); 
$list_tags[] = array(
    'id' => 5, 
    'title' => 'title 5', 
    'description' => 'description 5' 
); 



foreach($all_tags as $key => $val){ 
    echo $val; 
} 
+0

'$ all_tags'と' $ list_tags'は順序づけられていますか?つまり、両方とも常に「id」が最も低いアイテムから始まっていますか?この場合、それはむしろ単純です。それ以外の場合は、まず '$ list_tags'から' $ used_ids'のハッシュを作成してから '$ all_tags'の各項目をチェックしてください。 – raina77ow

+0

何を試しましたか? '$ list_tags'配列を検索する必要があります。多次元配列でもあるので、ループが必要です。 http://stackoverflow.com/a/8102246/689579 – Sean

+0

@Sean他の人が答えたことを知る前に、私は以下の回答を投稿しました。どちらも異なる – JasonDavis

答えて

-1

私は希望を行うには、このメソッドを得ました出力。私は私の提案は、最初$list_tags IDを取得し、$all_tags上だけ反復することである)=あまりにも常に

$all_tags = array(); 

$all_tags[] = array(
    'id' => 1, 
    'title' => 'title 1', 
    'description' => 'description 1' 
); 
$all_tags[] = array(
    'id' => 2, 
    'title' => 'title 2', 
    'description' => 'description 2' 
); 
$all_tags[] = array(
    'id' => 3, 
    'title' => 'title 3', 
    'description' => 'description 3' 
); 
$all_tags[] = array(
    'id' => 4, 
    'title' => 'title 4', 
    'description' => 'description 4' 
); 
$all_tags[] = array(
    'id' => 5, 
    'title' => 'title 5', 
    'description' => 'description 5' 
); 



$list_tags = array(); 
$list_tags[] = array(
    'id' => 1, 
    'title' => 'title 1', 
    'description' => 'description 1' 
); 
$list_tags[] = array(
    'id' => 2, 
    'title' => 'title 2', 
    'description' => 'description 2' 
); 
$list_tags[] = array(
    'id' => 5, 
    'title' => 'title 5', 
    'description' => 'description 5' 
); 






foreach ($all_tags as $allTagKey => $allTagElement) { 
    foreach ($list_tags as $listTagKey => $listTagElement) { 
     if ($allTagElement['id'] == $listTagElement['id']) { 
      $all_tags[$allTagKey]['class'] = 'added'; 
      break; // for performance and no extra looping 
     } 
    } 
} 

echo '<pre>'; 
print_r($all_tags); 
2

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [title] => title 1 
      [description] => description 1 
      [class] => added 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [title] => title 2 
      [description] => description 2 
      [class] => added 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [title] => title 3 
      [description] => description 3 
     ) 

    [3] => Array 
     (
      [id] => 4 
      [title] => title 4 
      [description] => description 4 
     ) 

    [4] => Array 
     (
      [id] => 5 
      [title] => title 5 
      [description] => description 5 
      [class] => added 
     ) 
) 
+1

ここで唯一の問題は '$ list_tags'配列のすべてのキー/値が' id'キーだけでなく完全一致であることです。 – JasonDavis

+0

ネストされた配列全体のオカレンスを検索します。ちょうど 'id'キー – RomanPerekhrest

1

他の方法に開いています。

この方法は、配列がまったく同じではなく、idが一致する場合に機能します。

$list_tags_ids = array_column($list_tags, 'id'); 

foreach($all_tags as &$val){ 
    if(in_array($val['id'], $list_tags_ids)) { 
     $val['class'] = 'added'; 
    } 
} 
関連する問題