値とキーの両方をPHP配列にプッシュする方法


355

このコードを見てください:

$GET = array();    
$key = 'one=1';
$rule = explode('=', $key);
/* array_push($GET, $rule[0] => $rule[1]); */

私はこのようなものを探していますので:

print_r($GET);
/* output: $GET[one => 1, two => 2, ...] */

これを行う機能はありますか?(array_pushこの方法では機能しないため)

回答:


759

いいえ、array_push()次のキーを決定する方法がないため、連想配列に相当するものはありません。

使用する必要があります

$arrayname[indexname] = $value;

10
わかりません。これはアイテムを配列に追加する通常の方法ではありませんか?
rgin 2013年

配列に複数のキーと値を追加するにはどうすればよいですか?たとえば、[indexname1] = $ value1および[indexname2] = $ value2があり、それらを$ arraynameに追加したい
King Goeks

8
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);はそれらをの唯一のアイテムとして設定します$arrayname。すでに$arrayname設定していて、その値を保持したい場合は、を試してください$arrayname += $anotherarray。最初の配列の既存のキーは2番目の配列によって上書きされることに注意してください。
チャーリーシュリーサー

1
「最初の配列の既存のキーは2番目の配列によって上書きされることに注意してください」というのは正しくありません。最初の配列が優先されます。あなたが行う場合は$a = array("name" => "John"); $a += array("name" => "Tom");、その後$a["name"]、「ジョン」になります
ariztiサンティアゴ

それが最も簡単な方法です。
-NomanJaved、

75

値を配列にプッシュすると、その数値キーが自動的に作成されます。

キーと値のペアを配列に追加するとき、すでにキーを持っているので、キーを作成する必要はありません。配列にキーをプッシュしても意味がありません。配列内の特定のキーの値のみを設定できます。

// no key
array_push($array, $value);
// same as:
$array[] = $value;

// key already known
$array[$key] = $value;

66

ユニオン演算子(+)を使用して配列を結合し、追加された配列のキーを保持できます。例えば:

<?php

$arr1 = array('foo' => 'bar');
$arr2 = array('baz' => 'bof');
$arr3 = $arr1 + $arr2;

print_r($arr3);

// prints:
// array(
//   'foo' => 'bar',
//   'baz' => 'bof',
// );

それで、あなたはそうすることができました$_GET += array('one' => 1);

共用体演算子の使用法についての詳細は、http://php.net/manual/en/function.array-merge.phparray_mergeのドキュメントにあります。


4
array_merge()and +演算子の基本的な違いは、2つの配列に同じキーの値が含まれている場合、演算子は+2番目の配列の値を無視します(オーバーライドしません)。また、数値キーの再番号付け/再
インデックスを行い

ありがとう、私は多くの配列関数を試しましたが、あなたの答えは私が望むものを達成するのに役立ちました
デンマーク

21

私の答えを表に追加したいと思います。ここにそれがあります:

//connect to db ...etc
$result_product = /*your mysql query here*/ 
$array_product = array(); 
$i = 0;

foreach ($result_product as $row_product)
{
    $array_product [$i]["id"]= $row_product->id;
    $array_product [$i]["name"]= $row_product->name;
    $i++;
}

//you can encode the array to json if you want to send it to an ajax call
$json_product =  json_encode($array_product);
echo($json_product);

これが誰かを助けることを願っています


1
私は数十のソリューションを調べましたが、これが私のユースケースに適合する唯一のものです。ありがとうございました!
ライアンバーニー2017

20

ペッカが言ったことはまさに...

または、必要に応じて、おそらく次のようにarray_mergeを使用できます。

array_merge($_GET, array($rule[0] => $rule[1]));

しかし、おそらくそれがはるかに単純であるため、ペッカの方法を好みます。


11

最も単純な方法がまだ投稿されていないのはなぜですか?

$arr = ['company' => 'Apple', 'product' => 'iPhone'];
$arr += ['version' => 8];

2
それは完全に同じではありません。array_mergeでは、右側の配列がキーの競合で勝ち、「+ =」では左側の配列が勝ちます
santiago arizti

@santiagoarizti「勝利」とはどういう意味ですか?
AlexioVay

1
2つの配列の両方に同じキーがarray_mergeあり、配列ユニオン+=)が逆の動作をする場合、つまり、array_mergeは2番目の配列の値を尊重し、配列ユニオンは最初の配列の値を尊重します。
サンティアゴアリツィー

私にとって完璧なソリューション。アレクシオを共有するためのTHX!:)
ThomasB

8

これはあなたに役立つかもしれないソリューションです

Class Form {
# Declare the input as property
private $Input = [];

# Then push the array to it
public function addTextField($class,$id){
    $this->Input ['type'][] = 'text';
    $this->Input ['class'][] = $class;
    $this->Input ['id'][] = $id;
}

}

$form = new Form();
$form->addTextField('myclass1','myid1');
$form->addTextField('myclass2','myid2');
$form->addTextField('myclass3','myid3');

あなたがそれを捨てるとき。このような結果

array (size=3)
  'type' => 
    array (size=3)
      0 => string 'text' (length=4)
      1 => string 'text' (length=4)
      2 => string 'text' (length=4)
  'class' => 
    array (size=3)
      0 => string 'myclass1' (length=8)
      1 => string 'myclass2' (length=8)
      2 => string 'myclass3' (length=8)
  'id' => 
    array (size=3)
      0 => string 'myid1' (length=5)
      1 => string 'myid2' (length=5)
      2 => string 'myid3' (length=5)

7

私は同じことを探していただけですが、私は古い学校なので、考え方が違うことに気づきました。私はずっとBASICとPERLに戻って、時々私は物事が本当にPHPでいかに簡単かを忘れます。

私はこの関数を作成して、3つの列があるデータベースからすべての設定を取得しました。setkey、item(key)&value(value)を取得し、上記のようにpushを使用せずに、同じkey / valueを使用して、settingsと呼ばれる配列に配置します。

本当に簡単でシンプル

//すべての設定を取得
$ settings = getGlobalSettings();


//ユーザーテーマの選択を適用します
$ theme_choice = $ settings ['theme'];

.. etc etc etc ....




関数getGlobalSettings(){

    $ dbc = mysqli_connect(wds_db_host、wds_db_user、wds_db_pass)またはdie( "MySQL Error:"。mysqli_error());
    mysqli_select_db($ dbc、wds_db_name)またはdie( "MySQL Error:"。mysqli_error());
    $ MySQL = "SELECT * FROM systemSettings";
    $ result = mysqli_query($ dbc、$ MySQL);
    while($ row = mysqli_fetch_array($ result)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; //プッシュの必要はありません
        }
    mysqli_close($ dbc);
$ settingsを返します。
}


他の投稿が説明するように... phpでは、使用しているときに配列を「プッシュ」する必要はありません

キー=>値

AND ...最初に配列を定義する必要もありません。

$ array = array();

定義したりプッシュしたりする必要はありません。$ array [$ key] = $ value;を割り当てるだけです。自動的にプッシュと宣言が同時に行われます。

セキュリティ上の理由から、(P)oor(H)elpless(P)rotection、つまり、Programming for Dummies、つまりPHPを追加する必要があります。他の方法はセキュリティリスクになる可能性があります。そこで、私の免責事項を作りました!


5
array_push($arr, ['key1' => $value1, 'key2' => value2]);

これは問題なく動作します。配列にその値を持つキーを作成します


4
反対票。これは、既存の$arr配列の最後に新しい配列をプッシュするだけです。
AlexioVay 2017

4

少し遅れますが、ネストされた配列を気にしない場合は、このアプローチをとることができます。

$main_array = array(); //Your array that you want to push the value into
$value = 10; //The value you want to push into $main_array
array_push($main_array, array('Key' => $value));

明確にするために、[{"Key": "10"}]のようなjson_encode($ main_array)を出力すると、


4

少し変ですが、これは私にとってはうまくいきました

    $array1 = array("Post Slider", "Post Slider Wide", "Post Slider");
    $array2 = array("Tools Sliders", "Tools Sliders", "modules-test");
    $array3 = array();

    $count = count($array1);

    for($x = 0; $x < $count; $x++){
       $array3[$array1[$x].$x] = $array2[$x];
    }

    foreach($array3 as $key => $value){
        $output_key = substr($key, 0, -1);
        $output_value = $value;
        echo $output_key.": ".$output_value."<br>";
    }

3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

// array ['key1' => "value1"、 'key2' => "value2"]を出力します


2

こんにちは私は同じ問題を抱えていました私はこの解決策を見つけました

 <?php

$fname=array("Peter","Ben","Joe");

$age=array("35","37","43");

$c=array_combine($fname,$age);

print_r($c);

?>

参照:w3schools



2

keyandで最初の位置に追加するにはvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

2

「キー」と「値」を既存の配列にプッシュするには、+=ショートカット演算子を使用できます。

次の非常に単純な例を参照してください。

$GET = [];
$GET += ['one' => 1];

の結果は次のprint_r($GET)ようになります。

Array
(
    [one] => 1
)

1

例array_merge()....

$array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result);

配列([色] =>緑、[0] => 2、[1] => 4、[2] => a、[3] => b、[形状] =>台形、[4] => 4 、)


1
array_push($GET, $GET['one']=1);

わたしにはできる。


これはを実行してから$GET['one']=1、そのステートメントの戻り値(= 1、右辺値)を使用してから、を実行しarray_push($GET, 1)ます。結果= [0]-> 1、[1]-> 1
KekuSemau

0

私は簡単な関数を書きました:

function push(&$arr,$new) {
    $arr = array_merge($arr,$new);
}

新しい要素を簡単に「アップサート」できるように:

push($my_array, ['a'=>1,'b'=>2])

0

ここにはすでにいくつかの素晴らしい例があります。連想配列要素をルート数値インデックスインデックスにプッシュする簡単な例を追加するだけです。

`$intial_content = array();

if (true) {
 $intial_content[] = array('name' => 'xyz', 'content' => 'other content');
}`

0

私は通常これを行います:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.