Як натиснути і значення, і ключ у масив 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. Майте на увазі, що будь-які існуючі ключі в першому масиві будуть перезаписані другим.
Чарлі Шліссер

1
"Майте на увазі, що будь-які існуючі ключі в першому масиві будуть перезаписані другим", що не відповідає дійсності, перший масив має пріоритет. якщо у вас $a = array("name" => "John"); $a += array("name" => "Tom");тоді $a["name"]буде "Джон"
santiago 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);.

Більше інформації про використання оператора профспілки порівняно array_mergeз документацією на http://php.net/manual/en/function.array-merge.php .


4
Основна різниця між оператором array_merge()і +оператором полягає в тому, що два масиви містять значення одного і того ж ключа, +оператор ігнорує значення з другого масиву (не переосмислює), також він не перенумеровує / переносить чисельні клавіші ...
jave.web

Дякую, я спробував багато функцій масивів, але ваша відповідь допомогла мені досягти того, що я хочу,
Данія,

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

Саме так сказав Пекка ...

Крім того, ви можете, ймовірно, використовувати 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
якщо два масиви мають і той самий ключ, array_mergeі об'єднання масиву ( +=) поводиться протилежно, тобто array_merge буде поважати значення з другого масиву, а об'єднання масиву буде поважати значення з першого масиву.
santiago arizti

ідеальне рішення для мене. THX для спільного використання Алексіо! :)
ThomasB

8

Це рішення, яке може бути корисним для u

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 = getGlobalSettings ();


// Застосувати вибір теми користувача
$ topic_choice = $ settings ['тема'];

.. і т. д. і т. д. ....




функція getGlobalSettings () {

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) або померти ("Помилка 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 ($ результат)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; // НЕ ТРЕБА ДЛЯ ПІШКУ
        }
    mysqli_close ($ dbc);
повернути $ налаштування;
}


Так, як і інші публікації пояснюють ... У php немає необхідності "PUSH" масив, коли ви використовуєте

Ключ => Значення

І ... Не потрібно спочатку визначати масив.

$ array = array ();

Не потрібно визначати чи натискати. Просто призначте $ array [$ key] = $ value; Це автоматично поштовх і декларація одночасно.

Я мушу додати, що з міркувань безпеки, (P) або (H) безлайн (P) ротація, я маю на увазі Програмування для манекенів, я маю на увазі 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), який буде мати вигляд [{"Key": "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

Для додавання до першої позиції за допомогою keyта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] => а, [3] => b, [форма] => трапеція, [4] => 4 ,)


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

Це працює для мене.


Це виконує $GET['one']=1, потім використовує повернене значення цього оператора (= 1, rvalue), а потім виконує array_push($GET, 1). Результат = [0] -> 1, [one] -> 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'
);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.