Search code examples
phparraysforeach

loop inside an array to add dynamic data, in php


I'm trying to create an array inside an array by using a foreach loop, I have a sample out come and the problem is I can not produce the exact out come as the sample - here's my code:

$json = '{"id":"118","item_key":"m6jgm","name":"Bright Madire","ip":"192.168.92.81","meta":{"2b9ta":"Bright","qy6sa":"Madire","k9ngs":"Bright Madire","y69z6":"bmadire@vayaafrica.com","58nj0":"0774222497","q78bq":"IS","culq4":"Software Engineer","tqe5r":"IT and Electronics","procured_items":{"form":"11","i116":{"procured_item_name":"Macbook Pro","procured_item_quantity":"1","gmy78":"","wki9u":"","procured_item_description":"- 500GB SDD\r\n- 16GB Unified\r\n- M2 Chip Processor\r\n- 15\" Screen","arpya":""},"i117":{"procured_item_name":"Lenobo ThinkPad","procured_item_quantity":"2","gmy78":"","wki9u":"","procured_item_description":"- 500GB SDD\r\n- 16GB Unified\r\n- Core i7 Processor\r\n- 15\" Screen","arpya":""}},"procured_item_name":["Macbook Pro","Lenobo ThinkPad"],"procured_item_quantity":["1","2"],"gmy78":["",""],"wki9u":["",""],"procured_item_description":["- 500GB SDD\r\n- 16GB Unified\r\n- M2 Chip Processor\r\n- 15\" Screen","- 500GB SDD\r\n- 16GB Unified\r\n- Core i7 Processor\r\n- 15\" Screen"],"arpya":["",""],"zzrfl":"","1g8ya":"","6cm1d":"RFQ","qcl2b":"No","xx48b":"2023-07-27","zsii":"16:40","request_status":"Send To Suppliers","qaolg":"","sromp":"","department_approval":"Approve","tvghy":"","finance_approval":"Approve","w2iyy":"","2iyii":"","2iyii-value":"8","fsu1s":"","nh3tu":"3"},"form_id":"10","post_id":"0","user_id":"8","parent_item_id":"0","is_draft":"0","updated_by":"10","created_at":"2023-07-27 14:24:42","updated_at":"2023-07-27 14:37:10"}';

$entryArray = json_decode($json, TRUE);
    $procuredItems = $entryArray['meta']['procured_items'];

    $first_field = 320;
    $second_field = 323;
    $third_field = 322;

    $ids = "0";
    $rows = "";
    $i = 1;
    $bigArray = array();
    
        $values[ 'value' ] = array(
          'form' => '10',
          'row_ids' => array( '0, 1' ),
        );
        
        
foreach($procuredItems as $key=>$value) {
  if ($key != "form"){
    
    // defining the dynamic values
    $title = $value['procured_item_name'];
    $quantity = $value['procured_item_quantity'];
    $desc = $value['procured_item_description'];

    // inserting the dynamic arrays into the main array
    $values[ 'value' ][] = array(
    $i-1 => array( 0 => '', $first_field => $value['procured_item_name'], $second_field => $value['procured_item_quantity'], $third_field => $value['procured_item_description'] ),
    );
    
    $i += 1;
  }
}

//this print my trial code output
var_dump( $values[ 'value' ] );
echo '</br>';
echo '</br>';
echo '</br>';

// Sample array structure
     $values[ 'value' ] = array(
       'form' => '10',
       'row_ids' => array( 0, 1 ),
          
        0 => array( 0 => '', $first_field => 'Macbook Pro', $second_field => '1', $third_field => '- 500GB SDD - 16GB Unified - M2 Chip Processor - 15" Screen' ),
        1 => array( 0 => '', $first_field => 'Lenobo ThinkPad', $second_field => '2', $third_field => '- 500GB SDD - 16GB Unified - Core i7 Processor - 15" Screen' ),
     );

// this print supposed sample output
var_dump( $values[ 'value' ] );

The correct printed array should be like this, the expected output below:

array(4) { ["form"]=> string(2) "10" ["row_ids"]=> array(2) { [0]=> int(0) [1]=> int(1) } [0]=> array(4) { [0]=> string(0) "" [320]=> string(11) "Macbook Pro" [323]=> string(1) "1" [322]=> string(59) "- 500GB SDD - 16GB Unified - M2 Chip Processor - 15" Screen" } [1]=> array(4) { [0]=> string(0) "" [320]=> string(15) "Lenobo ThinkPad" [323]=> string(1) "2" [322]=> string(59) "- 500GB SDD - 16GB Unified - Core i7 Processor - 15" Screen" } }

Unfortunalely my array is different because the moment I am trying to add those dynamic data, it adds another layer of an array. this is my output:

array(4) { ["form"]=> string(2) "10" ["row_ids"]=> array(1) { [0]=> string(4) "0, 1" } [0]=> array(1) { [0]=> array(4) { [0]=> string(0) "" [320]=> string(11) "Macbook Pro" [323]=> string(1) "1" [322]=> string(62) "- 500GB SDD - 16GB Unified - M2 Chip Processor - 15" Screen" } } [1]=> array(1) { [1]=> array(4) { [0]=> string(0) "" [320]=> string(15) "Lenobo ThinkPad" [323]=> string(1) "2" [322]=> string(62) "- 500GB SDD - 16GB Unified - Core i7 Processor - 15" Screen" } } }

I need help on producing the expected array.


Solution

  • Revise the following line

        // inserting the dynamic arrays into the main array
        $values[ 'value' ][] = array(
        $i-1 => array( 0 => '', $first_field => $value['procured_item_name'], $second_field => $value['procured_item_quantity'], $third_field => $value['procured_item_description'] ),
        );
    

    to my version,

        // inserting the dynamic arrays into the main array
        $values[ 'value' ][$i-1] = array( 0 => '', $first_field => $value['procured_item_name'], $second_field => $value['procured_item_quantity'], $third_field => $value['procured_item_description'] );
    

    Second, please formatting expected output, also using print_r() with <pre> more easier to read.

        print("<pre>");
        print_r($values);