phpmagentosoapmagento-soap-api

Multidimensional array issue when doing a SOAP request


I am pulling from a Magento instance using the SOAP V2 API. Magento is returning the results of my requests as multidimensional arrays, which i am encoding in json to help parse into html. However when i run into this format:

array(
    array(
        array()
    )
)

I am getting an Notice: Array to string conversion error.

Here is my code:

//Make sure a query is set
if (!empty($_GET['q'])) {

    $getQuery = $_GET['q'];

    //Requests
    switch ($getQuery) {
        case 'allorders':
            $result = json_decode(json_encode($client->salesOrderList($session)), true);
            break;
        case 'inventory':
            $result = json_decode(json_encode($client->catalogInventoryStockItemList($session, array(695, 694, 693, 692))), true);
            break;
        case 'products':
            $result = json_decode(json_encode($client->catalogProductList($session)), true);
            break;
    }

    //if (!empty($result)) {
    ?>

    <table>
        <thead>
            <tr>
                <th><?php echo implode('</th><th>', array_keys(current($result))); ?></th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($result as $row): $row; ?>
                <tr>
                    <td><?php echo implode('</td><td>', $row); ?></td>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>

    <?php
    //}
} else {
    echo "No Results Found";
}

// Close the session
$client->endSession($session);

The error is happening on the second implode in the for loop.

Update 14:45pm CST

This is what the actual output looks like

Array
(
    [0] => Array
        (
            [product_id] => 481
            [sku] => 012
            [name] => Twill Cap
            [set] => 9
            [type] => simple
            [category_ids] => Array
                (
                    [0] => 3
                    [1] => 4
                    [2] => 5
                    [3] => 11
                )

            [website_ids] => Array
                (
                    [0] => 2
                )

        )
)

Solution

  • As long as your data does not add another level o data:

    <?php foreach($bar as $row): ?>
                   <tr>
                        <td><?php echo implode('</td><td>', array_map(function($e) {
                    return is_array($e) ? implode(', ', $e) : $e;
                },  $row)); ?></td>
                    </tr>
    <?php endforeach; ?>