【问题标题】:strange results between local development and staging本地开发和分期之间的奇怪结果
【发布时间】:2015-02-10 04:48:39
【问题描述】:

我正在运行一个相当简单的脚本,它应该从数据库中返回一组结果,然后将结果解析为骨干集合。

在本地返回一个对象的对象,即

{
  {},
  {},
  {},
}

在登台服务器上,返回一个对象数组 - 这是正确的,所以我得到一个看起来像这样的响应,

[
    {},
    {},
    {},
]

两个实例运行相同的代码,PHP版本和相同的laravel安装,为什么我的本地机器返回一个对象而我的远程机器返回一个对象?

我所做的只是跑步,

$projects = array_unique(array_merge($owned_by_me, $managed_by_me, $sold_by_me, $owned_by_my_organisation, $client_projects, $collab_projects), SORT_REGULAR);
return Response::json($projects, 200);

我以前从未见过这样的事情。

【问题讨论】:

  • 如果输出有所不同,则有所不同。环境或配置文件。
  • 你能检查array_unique的输出是什么类型吗?它应该是一个数组...
  • @lukasgeiter 看起来本地array_unique 正在返回一个对象,而在暂存时array_unique 正在返回数组....有没有办法阻止array_unique 返回一个对象?跨度>
  • @Udders 您使用print_rvar_dump 检查了array_unique 返回的值?它总是返回array

标签: php arrays object laravel


【解决方案1】:

array_unique() 总是返回 array。 Laravel 配置中很可能有一些东西。我不知道Response::json() 是如何工作的,但是如果它使用json_encode() 本机PHP 函数,那么可以通过将标志JSON_FORCE_OBJECT 添加到其第二个参数来告诉它返回对象而不是数组。也许你可以在配置文件中找到它。

【讨论】:

    【解决方案2】:

    我猜,由于array_unique 保留了原来的索引,因此无法将其转换为数组。假设你传入这个数组:

    array('foo', 'foo', 'bar')

    你会得到:

    array('foo', 'bar')

    实际上是:

    array(0 => 'foo', 2 => 'bar')

    因此,由于索引计数的差距,它将被转换为 JSON 对象。

    使用array_values“重新排序”索引:

    $projects = array_unique(array_merge($owned_by_me, $managed_by_me, $sold_by_me, $owned_by_my_organisation, $client_projects, $collab_projects), SORT_REGULAR);
    $projects = array_values($projects);
    return Response::json($projects, 200);
    

    此外,您的环境之间的差异似乎在于您正在处理的数据

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 2010-11-27
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      相关资源
      最近更新 更多