Solved

What is $unrolled_data?

Posted on 2016-07-25
9
49 Views
Last Modified: 2016-07-26
Here's the function I'm attempting to deconstruct:

protected function pipeToArray($pipe_delim){

        $lines = explode("\n", str_replace("\r\n","\n",$pipe_delim));

        //Subsets of each statement
        $statement = array(
                'statement' => array(),
                'client' => array(),
                'guarantor' => array(),
                'patient' => array(),
                'unrolled_data' => array(),
                'rolled_data' => array(),
                'paymentplan_options' => array(),
                'paymentplan' =>array()
            );

        //Loop through the lines
        foreach ($lines as $raw_line) {

            //Split into cells
            $line = explode("|",$raw_line);

            switch ($line[0]) {
                  case 'N6' :
                    //Unrolled Account Information
                    $index = count($statement['unrolled_data']);
                    foreach($statement['unrolled_data'] as $i => $enc){
                        if($enc['encounterid'] === $line[1]) {
                            $index = $i;
                            continue;
                        }
                    }

                    $statement['unrolled_data'][$index]['txns'][] = array(

                        //'encounterid'   => $line[1],
                        //'provider_name' => $line[2],
                        'date'          => $line[3],
                        'type'          => $line[4],
                        'description'   => $line[5],
                        'amount'        => $line[6]
                        //'left_to_pay'   => $line[7]

                    );


                    break;
                case 'A6' :
                    //Rolled Account Information
                    $statement['rolled_data'][] = array(

                        'encounterid'   => $line[1],
                        'provider'      => $line[2],
                        'description'   => $line[3],
                        'date'          => $line[4],
                        'charged'       => $line[5],
                        'adjustments'   => $line[6],
                        'payments'      => $line[7],
                        'left_to_pay'   => $line[8]

                    );
                    break;
                }
        }
        return $statement;
    }

    /**
     * Return the pdf buffer string
     * @return String pdf buffer
     * @todo THESE ARE BEING HARDCODED TO TEMPLATEIDS... THIS SHOULD BE DONE ELSEWHERE, IN A BUILDER/FACTORY PERHAPS.
     */
    protected function toPDF(){
        if($this->statement_data['statement']['templateid'] == 4) {
            $image = new StandardStatementPDFGenerator($this);
        } else if ($this->statement_data['statement']['templateid'] == 9) {
            $image = new LetterStatementPDFGenerator($this);
        } else {
            //This is a "Fail Gracefully" measure. We haven't generated a statement
            //without a templateid since July 2013, so we shouldn't hit this moving
            //forward.
            $image = new StandardStatementPDFGenerator($this);
        }

        return $image->getStream();

    }

Open in new window


First part of my question: "unrolled_data" is not a column heading in a table. It is simply the name that's being given to a subset I'm about to create, correct?

Second part of my question: Beginning at line 26, I've got this:

//Unrolled Account Information
                    $index = count($statement['unrolled_data']);
                    foreach($statement['unrolled_data'] as $i => $enc){
                        if($enc['encounterid'] === $line[1]) {
                            $index = $i;
                            continue;
                        }
                    }

Open in new window


What's going on here?

$index=count($statement['unrolled_data']) // how can you count an array that has yet to be processed?

foreach($statement['unrolled_data'] as $I->$enc){ //where did $enc come from and what's happening here?

For the sake of clarity and brevity, I've attempted to streamline the function that I'm working on. What you see above is a portion of the actual code. I've got that below, just in case there's something missing from the puzzle that you need.

Bottom line: I'm trying to understand how "unrolled_data" is being defined and calculated.

What do you think?
0
Comment
Question by:brucegust
  • 4
  • 2
  • 2
  • +1
9 Comments
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 250 total points
ID: 41728278
lets start with the simplest part:
foreach($statement['unrolled_data'] as $I->$enc){ 

this is a looping statement on an array, putting the key value unto $I and the value into $enc variable
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 41728282
$index=count($statement['unrolled_data']) // how can you count an array that has yet to be processed?

remember that you are inside a loop, so it is being filled by prdvious iterations. on the first one, it will be 0 indeed.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 41728289
so, how is it populated?
by lines where the first cell is 'N6':

switch ($line[0]) { case 'N6' :
...
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:brucegust
ID: 41728334
Guy, my head hurts, trying to understand all of this, but let me try to explain this back to you:

I'm looping through a dataset. Every time the system registers the N6 cell, it's doing a couple of things:

In a regular array, you've got something like $line[1]. The "key" is "1" and the value is...? What?

I'm looking at $enc['encounter['id'] and it looks as though there's an if statement happening there, but what's happening?

Thanks for spelling this out for me...
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 41728336
Man pages:
http://php.net/manual/en/control-structures.foreach.php
http://php.net/manual/en/function.count.php

This code is nearly incomprehensible, cannot be tested, and should be refactored.  Nobody writes this kind of spaghetti any more, at least not since the last century.  One of the problems I see here is that the behavior of the code is tightly coupled to the content of the data.  But because of the way this code is written you cannot provide mock-data.  So a logical step in trying to discern behavior would be to look at the data.  You can do that with var_dump().
http://php.net/manual/en/function.var-dump.php
0
 
LVL 110

Assisted Solution

by:Ray Paseur
Ray Paseur earned 200 total points
ID: 41728341
In a regular array, you've got something like $line[1]
In this case, the array is named $line, and a reference to $line includes the entire array.  The index 1 gets you to one position in the array, which is a mixed data structure  What it contains is not evident from the code, because it could contain almost anything.  There are no "real restricitons" on what you can put into a PHP array!  You can use var_dump() to see what's in there (check comment above for a link to the PHP man page about the var_dump() function).

Here is how arrays work in PHP.
http://php.net/manual/en/intro.array.php
http://php.net/manual/en/language.types.array.php
http://php.net/manual/en/language.operators.array.php

Multidimensional arrays are always somewhat confusing, and are rarely encountered outside of academic exercises.  Experienced programmers would use object-oriented designs to help avoid them!  TL;DR -- don't feel bad if you find this confusing.  Everyone finds this kind of code and data structure confusing!
0
 
LVL 29

Assisted Solution

by:Olaf Doschke
Olaf Doschke earned 50 total points
ID: 41728988
$statement as an array of arrays, it is first filled in case 'N6', though the first iteration must be empty, the place it's filled is the code part:

$statement['unrolled_data'][$index]['txns'][] = array(

                        //'encounterid'   => $line[1],
                        //'provider_name' => $line[2],
                        'date'          => $line[3],
                        'type'          => $line[4],
                        'description'   => $line[5],
                        'amount'        => $line[6]
                        //'left_to_pay'   => $line[7]

                    );

Open in new window


This is some of the split line parts, the fields, ("unrolled data", not a term I'd use) to create an array and add that at the end of the array $statement['unrolled_data'][$index]['txns'] via the empty [], this means append a new element, as in $line = array(); $line[]='line1'; $line[]='line2';

I agree with Ray, this is spaghetti code, today we rather do tiers, layers, like lasagne.

Bye, Olaf.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 41729721
lol, I love Lasagne :-)
1
 

Author Comment

by:brucegust
ID: 41729728
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question