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

배열에 여러 키와 값을 추가하는 방법은 무엇입니까? 예를 들어 [indexname1] = $ value1 및 [indexname2] = $ value2를 $ arrayname에 추가하고 싶습니다
King Goeks

8
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);는에있는 유일한 항목으로 설정했습니다 $arrayname. 이미 $arrayname설정하고 값을 유지하려면을 시도하십시오 $arrayname += $anotherarray. 첫 번째 배열의 기존 키는 두 번째 배열에 의해 덮어 쓰기됩니다.
Charlie Schliesser

1
"첫 번째 배열의 기존 키는 두 번째 배열에 의해 덮어 쓰기됩니다."사실이 아닙니다. 첫 번째 배열이 우선합니다. 당신이 경우 $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()+연산자 의 기본 차이점 은 두 배열에 동일한 키 +의 값이있는 경우 두 번째 배열의 값을 무시하고 (재정의하지 않음) 숫자 키를 다시 번호 매기기 / 재 인덱싱하지 않는 것입니다.
jave.web

고마워, 나는 많은 배열 기능을 시도했지만 당신의 대답은 내가 원하는 것을 달성하는 데 도움이되었습니다
Danish

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
수십 가지 솔루션을 살펴 보았으며 이것이 유스 케이스에 맞는 유일한 솔루션입니다. 감사합니다!
라이언 버니

20

정확히 Pekka가 말한 ...

또는 원하는 경우 array_merge를 다음과 같이 사용할 수 있습니다.

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

그러나 Pekka의 방법은 훨씬 간단하기 때문에 아마도 선호합니다.


11

가장 간단한 방법이 아직 게시되지 않은 이유가 궁금합니다.

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

2
array_merge의 경우, 오른쪽의 배열이 키 충돌시 승리합니다. "+ ="에서 왼쪽의 배열이 승리합니다
santiago arizti

@santiagoarizti "wins"는 무슨 뜻인가요?
AlexioVay

1
두 배열에 동일한 키가 array_merge있고 배열 공용체 ( +=)가 반대 방식으로 작동하는 경우 즉, array_merge는 두 번째 배열의 값을 존중하고 배열 공용체는 첫 번째 배열의 값을 존중합니다.
santiago arizti

나를위한 완벽한 솔루션. Alexio 공유를위한 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를 사용하지 않고 동일한 키 / 값을 사용하여 settings라는 배열에 배치하십시오.

아주 쉽고 간단합니다

// 모든 설정 가져 오기
$ settings = getGlobalSettings ();


// 사용자 테마 선택 적용
$ theme_choice = $ settings [ 'theme'];

등 ....




getGlobalSettings () 함수

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) 또는 die ( "MySQL 오류 :". mysqli_error ());
    mysqli_select_db ($ dbc, wds_db_name) 또는 die ( "MySQL 오류 :". 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);
반환 $ 설정;
}


따라서 다른 게시물처럼 설명합니다 ... PHP에서는 사용할 때 배열을 "PUSH"할 필요가 없습니다.

키 => 값

AND ... 배열을 먼저 정의 할 필요가 없습니다.

$ array = array ();

정의하거나 푸시 할 필요가 없습니다. 그냥 $ array [$ key] = $ value; 자동으로 푸시와 선언입니다.

나는 보안상의 이유로 (P) oor (H) elpless (P) rotection을 추가해야한다. 나는 Dummies를위한 프로그래밍을 의미한다. 나는 PHP를 의미한다. 다른 방법은 보안 위험이 될 수 있습니다. 거기, 내 면책 조항을 만들었습니다!


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

이것은 잘 작동합니다. 배열에 값을 가진 키를 만듭니다.


4
공감. 이것은 기존 $arr배열 의 끝에 새로운 배열을 푸시합니다 .
AlexioVay

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));

명확히하기 위해 json_encode ($ main_array) 를 출력하면 [{ "키": "10"}]


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);

// 배열을 인쇄합니다. ''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

와 첫 번째 위치에 추가의 경우 keyvalue

$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);

배열 ([color] => 녹색, [0] => 2, [1] => 4, [2] => a, [3] => b, [모양] => 사다리꼴, [4] => 4 )


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

그것은 나를 위해 작동합니다.


그러면을 실행 $GET['one']=1한 다음 해당 문의 반환 값 (= 1, rvalue)을 사용한 다음을 실행 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.