2016-05-09 20 views
-1

私は彼らに既存の配列に1つの配列値を追加するには?

アレイ-1

[main] => Array 
     (
      [0] => stdClass Object 
       (
        [clientID] => 2 
        [maintenance_due] => 2016-05-09 00:00:00 
        [complete_maintenance] => 1 
        [description] => dfdff 
        [created_at] => 2016-05-01 00:00:00 
        [completed_on] => 2016-05-06 00:00:00 
        [name] => Bottel packing 
        [type_id] => 1 
        [machinecode] => HITBTP001 
        [model_no] => ModelA 
        [created_date] => 2016-03-27 06:55:05 
        [updated_date] => 0000-00-00 00:00:00 
       ) 

     ) 

アレイ-2

[dt] => Array 
    (
     [dtm] => 0 
     [edm] => 1 
    ) 

を追加する方法を、私は、既存の配列値を1つの配列の値を追加しようとしているが、私はこだわっていますこのようにしたい

[main] => Array 
     (
      [0] => stdClass Object 
       (
        [clientID] => 2 
        [maintenance_due] => 2016-05-09 00:00:00 
        [complete_maintenance] => 1 
        [description] => dfdff 
        [created_at] => 2016-05-01 00:00:00 
        [completed_on] => 2016-05-06 00:00:00 
        [name] => Bottel packing 
        [type_id] => 1 
        [machinecode] => HITBTP001 
        [model_no] => ModelA 
        [created_date] => 2016-03-27 06:55:05 
        [updated_date] => 0000-00-00 00:00:00 
        [dtm] => 0 
        [edm] => 1 


       ) 

     ) 

私は試していますarray_push機能foreachを使用しますが、動作していません。

どうすればいいですか?

+0

arrayの要素がobjectであるためです。 –

+0

実際には、配列ではなくstdClassオブジェクトを使用しています。 –

+0

'array_push()'はどうやって試しましたか? – axiac

答えて

1

オブジェクトに配列からarray_merge機能と変換(キャスト)を使用したソリューションその逆(基本stdClassオブジェクトの場合のみ):

// $array1 is your first array with 'main' key 
// $array2 is your second array with 'dt' key 

$main_arr = (array) current($array1['main']); // converting object into array 
$merged = array_merge($main_arr, $array2['dt']); // combining "properties" 

$array1['main'] = [(object) $merged]; // saving object with additional properties back to the initial array 

print_r($array1); // will give the expected output 
+0

ありがとうローマ、その作業は完璧です。 – aniruddh

+0

@aniruddh、よろしく – RomanPerekhrest

0

[0] =>はstdClassオブジェクト

何がインデックス0の下に持っていることはarrayが、objectではありません。 ArrayAccessインターフェイスを実装していない限り、通常の配列と同じようにこれを行うことはできません。

オブジェクト上

詳細:$big_arrayを想定しhttps://secure.php.net/manual/en/language.types.object.php

+0

私はdownvoterを聞くことを熱望しています.... –

+1

質問ポスターは配列対オブジェクトのような基本的な概念を理解するのが難しいようですマルチレベルアレイ。どのようにして 'array_push()'の使い方がわからなくても、この秘密の答えはどのように役立ちますか? – axiac

+0

答えは正確にそれを指摘します。私はOPが知識のバグかギャップのどちらかを意味するかもしれないことを理解できると思います。 –

0

は、あなたが投稿して$small_array最初の配列は、あなたが、これは動作するはず掲示二番目の配列である:

$big_array['main'][0] = (object)array_merge((array)$big_array['main'][0], $small_array['dt']); 

私は何をあなたのコードのルックスを知りませんこのように、これは自動的にあなたのために働くかもしれません:

$main[0] = (object)array_merge((array)$main[0], $dt); 

パーMarcin Orlowskiのコメントは、以下のいずれかのクラスやメソッドをオーバーライドするリスクなしでこれを行うための適切な方法である:

$main[0]->dtm = $dt['dtm']; 
$main[0]->edm= $dt['edm']; 
+1

大胆に言えば、このアプローチは 'stdClass'オブジェクトの場合にのみ意味があります。他の場合には、オブジェクトを任意のメソッドからキャストしてダム' stdClass'オブジェクトに変換するだけです。 –

+0

@MarcinOrlowskiありがとう、答えは更新されました – MonkeyZeus

関連する問題