• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 60
  • Last Modified:

What is $unrolled_data?

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
brucegust
Asked:
brucegust
  • 4
  • 2
  • 2
  • +1
3 Solutions
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
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
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
$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
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
so, how is it populated?
by lines where the first cell is 'N6':

switch ($line[0]) { case 'N6' :
...
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

 
brucegustPHP DeveloperAuthor Commented:
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
 
Ray PaseurCommented:
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
 
Ray PaseurCommented:
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
 
Olaf DoschkeSoftware DeveloperCommented:
$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
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
lol, I love Lasagne :-)
1
 
brucegustPHP DeveloperAuthor Commented:
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Microsoft Exchange Server

The MCTS: Microsoft Exchange Server 2010 certification validates your skills in supporting the maintenance and administration of the Exchange servers in an enterprise environment. Learn everything you need to know with this course.

  • 4
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now