【问题标题】:keyBy() doesn't change keys. Laravel 5.5keyBy() 不会更改键。拉拉维尔 5.5
【发布时间】:2018-05-31 17:19:59
【问题描述】:

我正在使用 laravel 并制作了小 api。我对keyBy() 有疑问。 我得到这样的回应

"translate": [
    0: {"id": 0, "lang": "az" },
    1: {"id": 0, "lang": "ru" },
    2: {"id": 0, "lang": "en" }
]

我想像这样更改这些数组的键:

"translate": [
    "az": {"id": 0, "lang": "az" },
    "en": {"id": 0, "lang": "ru" },
    "ru": {"id": 0, "lang": "en" }
]

用那个sn-p

foreach ($categories as $key => $row) {
    if ($row) {
        $row->translate = $row->translate->keyBy('lang');
    }
}

但是结果是一样的。数组键不会改变。我不知道为什么。我只是dd($row->translate),我得到了我想要的结果,但最后的结果和以前一样。谢谢!

【问题讨论】:

  • 你必须在一个新的数组变量中分配`$row->translate->keyBy('lang');`。意味着您必须创建新阵列。您不会更改轴阵列。
  • 你也可以试试as &$row
  • 当我使用as &$row时没有任何改变。

标签: php laravel api laravel-5.5 laravel-collection


【解决方案1】:

它应该可以正常工作,我相信问题出在其他地方。看看这个例子:

$object = new stdClass();

$object->translate = collect([
    0 => (object) ['id' => 0, 'lang' => 'az'],
    1 => (object) ['id' => 0, 'lang' => 'ru'],
    2 => (object) ['id' => 0, 'lang' => 'en'],
]);

$object2 = new stdClass();

$object2->translate = collect([
    0 => (object) ['id' => 0, 'lang' => 'x'],
    1 => (object) ['id' => 0, 'lang' => 'y'],
    2 => (object) ['id' => 0, 'lang' => 'z'],
]);

$categories = [$object, $object2];    

foreach ($categories as $key => $row) {
    if ($row){
        $row->translate = $row->translate->keyBy('lang');
    }
}    

dd($categories);

因此有:

array:2 [▼
  0 => {#329 ▼
    +"translate": Collection {#346 ▼
      #items: array:3 [▼
        "az" => {#335 ▼
          +"id": 0
          +"lang": "az"
        }
        "ru" => {#337 ▼
          +"id": 0
          +"lang": "ru"
        }
        "en" => {#338 ▼
          +"id": 0
          +"lang": "en"
        }
      ]
    }
  }
  1 => {#340 ▼
    +"translate": Collection {#345 ▼
      #items: array:3 [▼
        "x" => {#341 ▼
          +"id": 0
          +"lang": "x"
        }
        "y" => {#342 ▼
          +"id": 0
          +"lang": "y"
        }
        "z" => {#343 ▼
          +"id": 0
          +"lang": "z"
        }
      ]
    }
  }
]

如您所见,结果发生了变化

【讨论】:

  • 这个翻译是我的json 对象的主要部分。我必须将它分开以在集合中使用并放回去?
  • 对不起,我不明白你的意思,但正如我向你展示的那样,如果你使用集合,它应该可以正常工作,将我的代码与你的代码进行比较,并确保验证有效结果
  • 是的,我正在努力。 :) 感谢您的回复 :)
  • 我以为当我dd(response) 时所有键都出现了,但是当我评论dd(response) 并发送主json 时,所有键都在json 中消失了。我不知道怎么了。我会附上dd()和json结果的截图。
【解决方案2】:

translate 内dd($data)

translate 内 json 对象(api 响应)

我不知道什么改变了键。

【讨论】:

  • 首先你应该更新你的问题。此外,它并没有告诉我们你具体做了什么,你如何返回响应等等。
  • 我的问题是最新的。我只想在发送api 响应时显示密钥。目前,我无法得到它。我这样回复:return response()->make($data); 并收到HomeController 然后准备查看。
  • 太棒了。我们怎么知道这里的数据是什么?它不包含在您的问题中!在您的问题中,您使用 $categories 而不是 $data
  • $data 是$categories 的集合,我将其命名为$data。我把其中一部分命名为translate。我无法在此处附加 200 多行 json 或 Controller :) 生成数组的主要函数我之前在此处添加了它。
  • 如果错误出现在您的问题中未包含的代码的其他部分,我们将无法帮助您。
猜你喜欢
  • 2018-05-26
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2018-05-23
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多