简体   繁体   中英

add items to multidimensional array programmatically in php

I have the following array

 $a = array(0 => 'Item',
        1 => 'Wattles',
        2 => 'Types',
        3 => 'Compost',
        4=> 'Estimated',
        5 => '123',
        6 => 'Actual',
        7 => '12',
    );

That is sorted with the following code.

echo "<pre>";
print_r($a);

$a_len = count($a);
$fnl = array();
$i = 0;

while($i<$a_len){
    $fnl[$a[$i]] =  $a[++$i];
    $i++;
}
print_r($fnl);

It prints correctly

Array
(
    [Item] => Wattles
    [Types] => Compost
    [Estimated Qty] => 123
    [Actual Qty] => 12
)

until i add multiple entries.

Array
(
    [0] => Item
    [1] => Wattles
    [2] => Types
    [3] => Compost
    [4] => Estimated Qty
    [5] => 123
    [6] => Actual Qty
    [7] => 12
    [8] => Item
    [9] => Silt Fence
    [10] => Types
    [11] => Straw
    [12] => Estimated Qty
    [13] => 45
    [14] => Actual Qty
    [15] => 142
)

I need to make this add items in a multidimensional array.

$items = array
  (
  array("Wattles","Silt Fence), //items
  array("Compost","Straw"), //types 
  array(123,45), //estimated quantity
  array(12,142) //actual quantity
  );

There are a few given numbers. There are exactly 4 entries (8 items) before the list repeats itself.

I have been stuck on this portion for hours, and don't know how to get my code working as I want it to.

To get the expected result with string keys you can do:

foreach(array_chunk($a, 2) as $pairs) {
    $result[$pairs[0]][] = $pairs[1];
}

Yields:

Array
(
    [Item] => Array
        (
            [0] => Wattles
            [1] => Silt Fence
        )

    [Types] => Array
        (
            [0] => Compost
            [1] => Straw
        )

    [Estimated] => Array
        (
            [0] => 123
            [1] => 45
        )

    [Actual] => Array
        (
            [0] => 12
            [1] => 142
        )

)

Then if you want it numerically indexed:

$result = array_values($result);

You have your structure for a multidimensional array wrong. You should construct your array like this:

$a = array(
  0 => array(
    'Item' => 'Wattles',
    'Types' => 'Compost',
    'Estimated' => 123,
    'Actual' => 12
  )
);

Then to add to it:

$a[] = array(
  'Item' => 'Silt Fence',
  'Types' => 'Straw',
  'Estimated' => 45,
  'Actual' => 142
);

Render it out to see the results which are what I think you are looking for.

print_r($a);

I can post a link if you want to learn how to sort multidimensional arrays by sub-array values if you need.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM