Как протолкнуть значение и ключ в массив



взгляните на этот код:



$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 не будет работать этот способ)

542   16  

16 ответов:

нет, нет array_push() эквивалент для ассоциативных массивов, потому что нет способа определить следующий ключ.

вам придется использовать

$arrayname[indexname] = $value;

толкал значение в массиве автоматически создает для него числовой ключ.

при добавлении пары ключ-значение в массив, у вас уже есть ключ, вам не нужно, чтобы он был создан для вас. Нажатие клавиши в массив не имеет смысла. Вы можете установить только значение определенного ключа в массиве.

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

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

вы можете использовать оператор Union (+) для объединения массивов и сохранения ключей добавленного массива. Например:

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

там больше информации об использовании оператора union vs array_merge в документации по адресу http://php.net/manual/en/function.array-merge.php.

именно то, что сказал Пекка...

кроме того, вы можете, вероятно, использовать array_merge, как это, если вы хотите:

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

но я бы предпочел метод Пекки, вероятно, так как он намного проще.

Я хотел бы добавить свой ответ в таблицу и вот он:

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

надеюсь, что это поможет кому-то

Я просто сделал эту функцию, чтобы взять все настройки из базы данных, где их 3 столбца. setkey, item (key) & value (value) и поместите их в массив под названием settings, используя тот же ключ / значение без использования push так же, как выше.

довольно легко и просто на самом деле


// Get All Settings
$settings=getGlobalSettings();


// Apply User Theme Choice
$theme_choice = $settings['theme'];

.. etc etc etc ....




function getGlobalSettings(){

    $dbc = mysqli_connect(wds_db_host, wds_db_user, wds_db_pass) or die("MySQL Error: " . mysqli_error());
    mysqli_select_db($dbc, wds_db_name) or 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'];   // NO NEED FOR PUSH
        }
    mysqli_close($dbc);
return $settings;
}


Так же, как и другие сообщения объяснить... В php нет необходимости "толкать" массив при использовании

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

а... Нет необходимости сначала определять массив.

$array=array ();

Не нужно определять или толкать. Просто назначьте $array[$key] = $value; это автоматически толчок и объявление одновременно.

Я должен добавить, что для из соображений безопасности, (п)оор (ч)elpless (П)защита, Я средства программирования для чайников, я имею в виду на PHP.... хе-хе я предлагаю вам использовать эту концепцию только для того, что я намеревался. Любой другой метод может представлять угрозу безопасности. Там, мой отказ!

это решение, которое может быть полезно для 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)

немного странно, но это сработало для меня

    $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>";
    }

немного поздно, но если вы не возражаете против вложенного массива, вы можете использовать этот подход:

$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"}]

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

/ / печатает массив ['key1' =>" value1", 'key2'= > "value2"]

мне интересно, почему самый простой метод еще не был опубликован:

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

это то же самое, как слияние двух массивов вместе с array_merge.

привет у меня была такая же проблема я нахожу это решение вы должны использовать два массива затем объединить их оба

 <?php

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

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

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

print_r($c);

?>

ссылки : w3schools

самый простой способ:

$GET = array();    
$key = 'one=1';
parse_str($key, $GET);

http://php.net/manual/de/function.parse-str.php

array_push($GET, $GET ['one']=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);

Array ([color] = > зеленый,[0] => 2,[1] => 4,[2] => a, [3] = >b, [shape] = > трапеция,[4] => 4,)

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

это работает просто отлично. создает ключ с его значением в массиве

Comments

    Ничего не найдено.