如何在foreach中从JSON回显数组到字符串的转换


How do I echo an array to string conversion from JSON in a foreach

我想把一个数组传递到数据库中,但我收到通知,echo无法打印出我想要的字符串。

注意:第7行的数组到字符串转换(echo$item;)

如何捕获发送到数据库中的数据?

其中数组由作者及其书籍发送。例如

[{"name":"Book1","books":["Book1.1"]},{

这是next.php,在这里传递数据而不进行回显。

<?php
var_dump($_POST);
$data = json_decode(stripslashes($_POST['arr']), true);
foreach($data as $item){
   echo $item;
   // insert to db
}
?>

该警报在sendToServer函数中为我提供了来自next.php的返回数据(请参阅代码片段)。

success: function(data) {
    alert(data);
}

代码段中的完整代码:

<!DOCTYPE html>
<html>
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <style type="text/css">
    <!-- #main {
      max-width: 800px;
      margin: 0 auto;
    }
    -->
  </style>
</head>
    <body>
    <div id="main">
        <h1>Add or Remove text boxes with jQuery</h1>
        <div class="my-form">
<!--            <form action="next.php" method="post">-->
                <button onclick="addAuthor()">Add Author</button>
                <br>
                <br>
                <div id="addAuth"></div>
                <br>
                <br>
                <button onclick="submit()">Submit</button>
<!--            </form>-->
        </div>
        <div id="result"></div>
    </div>
    <script type="text/javascript">
        var authors = 0;
        function addAuthor() {
        authors++;
            var str = '<br/>' + '<div id="auth' + authors + '">' + '<input type="text" name="author" id="author' + authors + '" placeholder="Author Name:"/>' + '<br/>' + '<button onclick="addMore(''auth' + authors + ''')" >Add Book</button>' + '</div>';
            $("#addAuth").append(str);
        }
        var count = 0;
        function addMore(id) {
            count++;
            var str = 
            '<div id="bookDiv' + count + '">' 
                + '<input class="' + id + '" type="text" name="book' + id + '" placeholder="Book Name"/>' 
                + '<span onclick="removeDiv(''bookDiv' + count + ''')">Remove</span>'
            + '</div>';
            $("#" + id).append(str);
        }
        
        function removeDiv(id) {
            $("#" + id).slideUp(function() {
                $("#" + id).remove();
            });
        }
        function submit() {
            var arr = [];
            for (i = 1; i <= authors; i++) {
                var obj = {};
                obj.name = $("#author" + i).val();
                obj.books = [];
                $(".auth" + i).each(function() {
                var data = $(this).val();
                    obj.books.push(data);
                });
                arr.push(obj);
            }
            sendToServer(arr);
            //$("#result").html(JSON.stringify(arr));
        }
        function sendToServer(data) {
            $.ajax({
                type: "POST",
                data: {
                    arr: JSON.stringify(data)
                },
                url: "next.php",
                success: function(data) {
                        alert(data);
                }
            });
            
        }
    </script>
</body>
</html>

您将在第7行(echo$item;)获得注意:数组到字符串的转换,因为您将打印数组。您不能打印数组,而您可以打印字符串。做那样的事要用这样的东西。

<?php
var_dump($_POST);
$data = json_decode(stripslashes($_POST['arr']), true);
for ($i=0;$i<count($data);$i++){
    echo "Name: ".$data[$i]['name']. "<br/>";
    echo "Books: ";
    foreach($data[$i]['books'] as $book){
        echo $book . " ";
    }
    echo "...............<br/>";    
    // insert to db example
    $sql="INSERT INTO author(id, name) VALUES (NULL, '".$data[$i]['name']."')";
    //execute query and get last insert id
    //$author_id=last insert id
    foreach($data[$i]['books'] as $book){
        $sql="INSERT INTO author_books(id, author_id, book_name) VALUES (NULL,'$author_id', '$book')";
        //execute query
    }
}
?>

这就是您从POST得到的:

    [
        {
            "name":"Book1",
            "books": [
                "Book1.1"
            ]
        },{
            "name":"Book2",
            "books": [
                "Book2.1",
                "Book2.2"
            ]
        }
    ]

要使用foreach读取数据,您需要执行以下操作:

foreach($data as $item) {
    echo "Name: " . $item["name"] . "<br>";
    echo "Books: " . implode(", ", $item["books"]) . "<br>";
    // Other way..
    echo "Name: " . $item["name"] . "<br>";
    echo "Books: <br>";
    foreach($book as $item["books"])
        echo $book . "<br>";
}

通过这个foreach,您可以操作数据并构建INSERT语句来将数据输入数据库。