小编Tom*_*und的帖子

你能用值显式复制包含"引用"元素的PHP数组吗?

关于PHP数组元素的引用的背景

假设您使用嵌套的PHP数组创建一个复杂的数据结构,如下所示:

$a1 = array(
    'b' => array('foo' => 1),
    'c' => array('bar' => 1)
);
Run Code Online (Sandbox Code Playgroud)

想象一下,数组要更加嵌套,具有更多元素和更长,更有意义的名称.

如果需要经常访问$ a1的子结构,对于读写,可能会想要创建这样的"别名":

$b = &$a1['b'];
Run Code Online (Sandbox Code Playgroud)

然而,由于"任务"实际上改变了$ a1,这导致了巨大的混乱.

我认为许多缺乏经验的PHP开发人员(比如我)会认为$ b是在分配后对$ a1 ['b']的引用.真正发生的是$ b AND $ a1 ['b']变成对元素的引用array('foo' => 1),带来意想不到的后果.我发现这非常不直观.

假设您需要保留$ a1,但是您还需要$ a1的副本,让我们调用副本$ a2,并更改$ a2的一些元素:

$a2 = $a1;           // Copy $a1 to $a2
$a2['b']['foo'] = 2; // GOTCHA! This will change $a1['b']['foo'] as well!
$a2['c']['bar'] = 2; // This will not change $a1['c']['bar'] however
Run Code Online (Sandbox Code Playgroud)

因为我们之前创建了对$ a1 ['b']的引用,所以该元素将通过引用分配,而$ a1的其余部分按值复制.这花了我几个小时才弄明白. …

php arrays reference

7
推荐指数
1
解决办法
175
查看次数

Dropzone.js - 如何动态附加可点击(上传按钮)

使用dropzone.js进行拖放文件上传,我想动态附加文件上传按钮.

该页面包含订单列表.当您选择订单时,它将通过Ajax调用加载并显示.我在页面加载时在document.body上实例化Dropzone,以便在选择订单之前拒绝带有友好错误消息的上传.加载订单后,会按顺序呈现上传按钮,我想将Dropzone点击处理程序附加到此动态创建的按钮.每次选择新订单时,都会重新创建该按钮.

clickable在创建Dropzone之后,我似乎无法弄清楚如何设置/更改Dropzone选项.

var documentDropzone = new Dropzone(document.body, {
  url: '/path/to/upload.php',
  clickable: false,
  init: function() {
    this.on('sending', function(file, xhr, formData) {
      var order_id = parseInt($('#dropzone_order_id').val(), 10);
      formData.append('order_id', order_id);
    });
  },
  accept: function(file, done) {
    if (parseInt($('#dropzone_order_id').val(), 10)) done();
    else {
      showErrorMessage('Please select an order first');
      done('error');
    }
  },
  success: function(file, response) {
    // handle response
  }
});

$(document).on('click', '.view-opener', function(event) {
  event.preventDefault();
  $('#view-order').remove();
  var view = $('<div id="view-order"></div>')
    .prependTo('#inner-container-top');
  view.load(this.href, function(){

    // This is the failing line …
Run Code Online (Sandbox Code Playgroud)

jquery dropzone.js

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

arrays ×1

dropzone.js ×1

jquery ×1

php ×1

reference ×1