小编Lew*_*wis的帖子

PHP - 与array_slice()等效的对象;

我正在尝试删除对象中的前两项.例如,如果我想从数组中删除前两项,我将使用array_slice($ arrayName,2).

我在我的对象上尝试了这个(嘿,为什么不呢?我知道它在技术上不是一个数组,但我很乐观)并且它不起作用.

搜索时,我发现的只是从数组中删除项目的方法.

    $categories = array_slice(Mage::getModel('catalog/category')->getCollection()->addAttributeToSelect('*'), 2);


    foreach($categories as $category){
        echo "<div class='col'>{$category->getName()}</div>";
    }
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想$categories在通过foreach循环运行它之前从(它们是'Root Category'和'Default')对象中删除前两个类别.最好的方法是什么?我知道我能做到;

if($category->getName() != 'Root Category' && $category->getName() != 'Default'){
  echo $category->getName();
}
Run Code Online (Sandbox Code Playgroud)

但这感觉就像一个肮脏的解决方案

编辑

在阅读Patrick Q的评论之后,我意识到这确实是一系列对象.所以我现在的问题是,为什么在将array_slice应用于此数组时会导致空白屏幕?未应用array_slice时,循环正常工作.

编辑2

忽略最后一次编辑.它是一个对象.

至于可能的重复,虽然问题(问题)确实帮助我解决了我的问题,但我认为,本质上它们是不同的问题.这个问题的核心是围绕找到对象的array_slice()的有用替代方案.另一方面,链接的问题想要找到一种方法,特别是基于下拉属性过滤Magento集合.虽然他们可能已到达同一目的地,但目的和旅程却截然不同.

php arrays magento

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

Javascript画布游戏 - 碰撞检测

我正在构建一个小型迷你瓦片引擎游戏.我目前正致力于实现简单的基于块的碰撞检测,但是我遇到了真正的问题.我用谷歌搜索了几个小时看不同的实现,但似乎无法理解它.我现在的工作(目前只在检测到碰撞时,玩家移动),大多是工作,但允许玩家通过障碍物的底部.碰撞使用法线贴图阵列来检测碰撞,地图中任何2的值都是实体对象.

我理解我需要做的概念 - 在移动我的播放器之前,计算播放器最终会进入的单元格.检查分配给该单元格的值.如果是2,请勿让玩家移动.

我的问题是弄清楚玩家将在技术上最终进入的细胞,在点上,玩家可以同时在4个细胞中.我尝试过使用原点和4角检测来解决这个问题,但我无法让它发挥作用.

JS Fiddle HERE - https://jsfiddle.net/j1xqxze8/

我的守则;

    var Player = function() {
        this.width = 16;
        this.height = 16;
        this.position   = {};
        this.position.x = 32;
        this.position.y = 32;
        this.speed      = 8;

        this.render = function() {
            window.context.fillStyle = 'white';
            window.context.fillRect(this.position.x, this.position.y, this.width, this.height);
        };

        var _self = this;

        this.didCollide = function(dir) {
            if(dir == 'right'){
                var newBlock = window.tileMap.getCell(Math.floor((_self.position.x + _self.width) / 32), Math.floor((this.position.y + this.height / 2) / 32));

                if(newBlock == 2)
                    return true;
            } …
Run Code Online (Sandbox Code Playgroud)

html javascript canvas collision-detection

5
推荐指数
1
解决办法
366
查看次数

Laravel迁移过程中的分段错误

问题

在此输入图像描述

按照我刚才的问题在这里,有人指出,我认为我不应该试图在Laravel厂(即我应该填补他们在自己的工厂),以填补相关的模型.

但是,我有一个观察者在创建过程中查找相关数据并尝试填充相关模型(这样我就可以使用create::方法和单个多步骤形式创建多个相关实体).现在,我需要添加一个检查以查看此数据是否填充在观察者中,因此我不必在工厂中指定它.

这样做,我现在在尝试为数据库设定种子时遇到分段错误.我已经将原因缩小到这一行 - 没有isset检查,它工作正常(除了$ data ['day']没有指定,因此检查);

分段故障(核心转储)

if(isset($data['day'])) $event->day->fill($data['day']);
Run Code Online (Sandbox Code Playgroud)

相关代码

EventFactory.php

$factory->define(App\Event::class, function (Faker $faker) {
    return [
        "name"                        => "A Test Event",
        "description"                 => $faker->paragraphs(3, true),
        "event_start_date"            => today(),
        "event_opening_date"          => today(),
        "event_closing_date"          => tomorrow(),
        "user_id"                     => 1,
        "banner_id"                   => 1,
        "gallery_id"                  => 1,
        "related_event_id"            => 1,
        "status"                      => "published",
        "purchase_limit"              => 1000,
        "limit_remaining"             => 1000,
        "delivery_method"             => "collection",
        "merchandise_delivery_method" => "collection"
    ];
});
Run Code Online (Sandbox Code Playgroud)

EventObserver.php

public function created($event){
        # get all …
Run Code Online (Sandbox Code Playgroud)

php segmentation-fault laravel

5
推荐指数
1
解决办法
1098
查看次数

使用 Javsacript 从输入中删除 :valid 伪类

我有一个包含多个部分的表单。每个部分都使用 Bootstrap 4 验证手动验证(无需提交真实表单)。这适用于下面的代码;

let eventCreationForm = $(".event-creation-form");
if (!eventCreationForm[0].checkValidity()) {
    eventCreationForm.find(":submit").click();
}
Run Code Online (Sandbox Code Playgroud)

但是,我只想突出显示无效的输入。即,不要以绿色突出显示有效输入。而不是为此覆盖引导程序样式,我想我会尝试:valid从有效输入中删除伪类。但是,我找不到任何人这样做的例子。我在 SO 上查看的问题只是通过 CSS 更改样式。

我认为这样的事情可能会奏效, eventCreationForm.find(":valid").removeClass(":valid");但我想它不会,因为它不是真正的课程。

下面的例子有一个调用堆栈错误,但这只是这个例子。

let eventCreationForm = $(".event-creation-form");
if (!eventCreationForm[0].checkValidity()) {
    eventCreationForm.find(":submit").click();
}
Run Code Online (Sandbox Code Playgroud)
$(document).ready(function(){
    var forms = document.getElementsByClassName('needs-validation');
    var validation = Array.prototype.filter.call(forms, function(form) {
      form.addEventListener('submit', function(event) {
        if (form.checkValidity() === false) {
          event.preventDefault();
          event.stopPropagation();
        }
        form.classList.add('was-validated');
      }, false);
    });
    
    $(".manual-submit").click(function(){
      let eventCreationForm = $(".event-creation-form");
      if (!eventCreationForm[0].checkValidity()) {
        eventCreationForm.find(":submit").click();
      }
    })
  })
Run Code Online (Sandbox Code Playgroud)

javascript validation bootstrap-4

5
推荐指数
1
解决办法
2080
查看次数

Laravel - 使用 model::create() 时忽略不存在的字段

问题

我不能让 Laravel 忽略在 Eloquent 的create方法中或为数据库播种时不存在于数据库中的字段。在下面的示例中,事件表中不存在“天”字段。但是,我需要它出现在数组中,以便我可以在 EventObserver.php 中使用它,以便在创建 $event 的同时创建 $event->day。我意识到我可以Day在它自己的工厂中创建它,我只是想知道这是否可能,甚至是可取的。

错误

未找到列:“字段列表”中的 1054 列“天”未知

我的代码

我正在尝试将一个 Observer 方法附加到我的事件模型,该created方法监听该方法,以便我可以为每个关系创建一个新对象。在我的 EventObserver 中,我有以下内容;

public function created(Event $event)
{

//get all attributes
$data = $event->getAttributes();

# fill any related models
$event->day->fill($data['day']);

# save event
$event->push();
}
Run Code Online (Sandbox Code Playgroud)

在我的 Event Factory 中,我有这个;

//EventFactory.php
$factory->define(App\Event::class, function (Faker $faker) {
    return [
        "name"                        => "A Test Event",
        "description"                 => $faker->paragraphs(3, true),
        "event_start_date"            => today(),
        "event_opening_date"          => today(),
        "event_closing_date"          => tomorrow(),
        "user_id" …
Run Code Online (Sandbox Code Playgroud)

php laravel eloquent

3
推荐指数
1
解决办法
3287
查看次数

axios “url”参数必须是字符串类型。收到类型未定义错误

我正在开发一个电子应用程序,该应用程序试图从 unsplash API 下载照片并将其设置为墙纸。当我调用 API 时,我得到 200 OK 状态并获取下载 URL,但是当我尝试使用 axios 流方法下载照片时,我收到以下错误:

UnhandledPromiseRejectionWarning:TypeError [ERR_INVALID_ARG_TYPE]:“url”参数必须是字符串类型。接收类型未定义

这是功能代码:

ipcMain.on("getRandomWallpaper", async event => {
  const randomApi = `${apiGateway}/?client_id=${unsplashKey}`;
  const request = await axios({
    method: "get",
    url: randomApi
  });
  if (request.status === 200) {
    const downloadUrl = request.data.links.download;
    const imagePath = "./images";
    const download_image = async (downloadUrl, imagePath) => {
      await axios({
        downloadUrl,
        responseType: "stream"
      }).then(
        response =>
          new Promise((resolve, reject) => {
            response.data
              .pipe(fs.createWriteStream(imagePath))
              .on("finish", () => resolve())
              .on("error", e => reject(e));
          })
      ); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js electron axios

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