0

I have two different arrays and I want to create a table with these two arrays.

But I don't know how to realize this in just one foreach loop with Laravel Blade.

The first array is from a external api and the second array was a Laravel Collection I converted to an array with - toArray()

As you can see both arrays have 10 elements and in my table I want to have each row with columns from both arrays.

array:10 [▼
  0 => {#193 ▼
    +"instanceID": "Ex1"
    +"alias": null
    +"displayName": "Ex1"
    +"instanceHost": "exserver"
    +"startMode": "automatic"
    +"processID": 2960
    +"status": "running"
    +"startStopError": null
  }
  1 => {#194 ▶}
  2 => {#195 ▶}
  3 => {#196 ▶}
  4 => {#197 ▶}
  5 => {#198 ▶}
  6 => {#199 ▶}
  7 => {#200 ▶}
  8 => {#201 ▶}
  9 => {#202 ▶}
]

array:10 [▼
  0 => array:8 [▼
    "id" => 1
    "name" => "Example"
    "street" => "Exstreet 1"
    "postalcode" => 1234
    "city" => "Town"
    "created_at" => "2015-11-05 16:18:02"
    "updated_at" => "2015-11-05 16:53:58"
    "status" => "Silver"
  ]
  1 => array:8 [▶]
  2 => array:8 [▶]
  3 => array:8 [▶]
  4 => array:8 [▶]
  5 => array:8 [▶]
  6 => array:8 [▶]
  7 => array:8 [▶]
  8 => array:8 [▶]
  9 => array:8 [▶]
]

Can you help me?

Greets Wipsly

Wipsly
  • 5
  • 1
  • 1
  • 5

3 Answers3

4

Hows about this? array_merge will get it done, but this will show you another option that should be fairly easy to understand.

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Street</th>
            <th>Zip</th>
            <th>City</th>
            <th>Created At</th>
            <th>Updated At</th>
            <th>Status</th>
            <th>Instance ID</th>
            <th>Alias</th>
            <th>Display Name</th>
            <th>Instance Host</th>
            <th>Start Mode</th>
            <th>Process ID</th>
            <th>Status</th>
            <th>Start Stop Error</th>
        </tr>
    </thead>
    <tbody>
        @foreach($secondArray as $key => $row)
            <tr>
                <th>{{ $row['id'] }}</th>
                <th>{{ $row['name'] }}</th>
                <th>{{ $row['street'] }}</th>
                <th>{{ $row['postalcode'] }}</th>
                <th>{{ $row['city'] }}</th>
                <th>{{ $row['created_at'] }}</th>
                <th>{{ $row['updated_at'] }}</th>
                <th>{{ $row['status'] }}</th>
                <th>{{ $firstArray[$key]->instanceId }}</th>
                <th>{{ $firstArray[$key]->alias }}</th>
                <th>{{ $firstArray[$key]->displayName }}</th>
                <th>{{ $firstArray[$key]->instanceHost }}</th>
                <th>{{ $firstArray[$key]->startMode }}</th>
                <th>{{ $firstArray[$key]->processID }}</th>
                <th>{{ $firstArray[$key]->status }}</th>
                <th>{{ $firstArray[$key]->startStopError }}</th>
            </tr>
        @endforeach
    </tbody>
</table>

EDIT: Though, personally, I really like this MultipleIterator option.

Mikel Bitson
  • 3,583
  • 1
  • 18
  • 23
2

The simplest way is to merge the arrays in one array and loop as one array, for example:

@foreach(array_merge($externalApi, $myArray) as $item)
    // ...
@endforeach

Hope there are no duplicate fields in arrays.

The Alpha
  • 143,660
  • 29
  • 287
  • 307
2

You can use SPL's MultipleIterator for this:

$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($array1));
$mi->attachIterator(new ArrayIterator($array2));
foreach($mi as list($array1data, $array2data)) {
    var_dump($array1data,$array2data);
}
Mark Baker
  • 209,507
  • 32
  • 346
  • 385