Laravel Input :: old是一个字符串数组

时间:2015-07-23 01:59:25

标签: php laravel laravel-4

在我的表单中输出一些json或一串数据,这些数据来自Input :: old(' tags'),我遇到的问题是能够测试它并看到如果它是json并且如果它是一个foreach循环并且将tag属性放入一个数组然后内爆数组并将其输出到输入字段中。

[{"id":112,"tag":"corrupti","tagFriendly":"corrupti","created_at":"2015-07-20 00:05:28","updated_at":"2015-07-20 00:05:28","pivot":{"question_id":60,"tag_id":112,"created_at":"2015-07-20 00:05:28","updated_at":"2015-07-20 00:05:28"}},{"id":9,"tag":"placeat","tagFriendly":"placeat","created_at":"2015-07-20 00:05:23","updated_at":"2015-07-20 00:05:23","pivot":{"question_id":60,"tag_id":9,"created_at":"2015-07-20 00:05:28","updated_at":"2015-07-20 00:05:28"}}]

所以我的输出应该是这样的

'corrupti, placeat, etc...'

有人可以按照我刚才概述的步骤帮助我获得所需的结果

这段代码不起作用,但它是我需要发生的事情。 is_array总是假的

<?php
    $tags = Input::old('tags');
    if(is_array($tags)) {
        foreach ($tags as $tag) {
            $tags[] = $tag->tag;
        }
        $tags = implode(', ', $tags);   
    }                       
?>

3 个答案:

答案 0 :(得分:3)

你走了。

$tags = json_decode(Input::old('tags'), true); // decode json input as an array

if (is_array($tags)) {
    foreach ($tags as $key=>$value) {
        $tags[$key] = $value['tag'];
    }
    $tags = implode(', ', $tags);
    echo $tags;
}

答案 1 :(得分:1)

您可以使用array_map从对象中提取标记属性。

<?php
$jsonObject = json_decode(Input::old('tags'));
if(is_array($jsonObject)) {
    $onlyTags = array_map(function($item) { return $item->tag; },$jsonObject);
    print implode(",", $onlyTags);
}

答案 2 :(得分:1)

尝试将true添加到json_decode。

json_decode($tags, true);

根据应该返回关联数组的文档。 http://php.net/manual/en/function.json-decode.php

is_array可能不适用于具有键/值对的关联数组。尝试使用此函数替换is_array:

function is_associate_array($array)
{
    return $array === array_values($array);
}

所以:

if(is_associate_array(json_decode($tags, true))) {

}