0

I am generating a dictionary in PHP where key and values are added to the dictionary.

But I am not able to fetch the values back. I am using following code:

    //some code here
    while (($line = fgets($fileServices)) !== false) {
            //echo $line.'....................';
            if (strpos($line,'header') == false){
                    $serviceName=explode(",", $line)[0];
                    $RestartData=explode(",", $line)[1];
                    $StatusData=explode(",", $line)[2];
                    $serviceRestartMappingdict[$totalServices]= $serviceName.':'.$RestartData;
                    $serviceStatusMappingdict[$totalServices]= $serviceName.'_'.$StatusData;
                    $totalServices = $totalServices+1;
            }
    }
    $counter=0;
    //echo $serviceStatusMappingdict[0];
    fclose($fileServices);

    $counter=0;
    for ($i = 0; $i < count($serviceStatusMappingdict); ++$i){
            echo '<<<<<<<<<<<<<<<<<<<<<<<'.$serviceStatusMappingdict[$i].'>>>>>>>>>>>>>>>>>>>>>>>>>>>';
    }

If I do an echo like echo $serviceStatusMappingdict[0];, I get the value but when I use a loop to access the data I do not get any value.

7
  • what is the result of echo $serviceStatusMappingdict[1]; ? Commented Mar 16, 2016 at 15:34
  • It gives me element at 1 Commented Mar 16, 2016 at 15:37
  • print_r ($serviceStatusMappingdict); so we can help you Commented Mar 16, 2016 at 15:40
  • It gives me: ( [0] => kakfa_ps -ef | grep kafka | grep server.properties [1] => zookeeper_ps -ef | grep zookeeper | grep zookeeper.properties [2] => schemaregistry_ps -ef | grep schema-registry | grep java [3] => influx_/sbin/service influxdb status | grep active | grep running [4] => mysql_/sbin/service mysql status | grep active | grep running [5] => cassandra_/sbin/service cassandra status | grep active | grep exited [6] => aerospike_/sbin/service aerospike status | grep active | grep running ) Commented Mar 16, 2016 at 15:44
  • :( it really should work, i don't understaind where is the issue... please try with this code and show me the result print 'Type: ' . gettype($serviceStatusMappingdict) . "\n" ; print 'Count: ' . count($serviceStatusMappingdict) . "\n\n"; foreach ($serviceStatusMappingdict as $key => $value) { echo gettype ($key) . "\n"; echo $value . "\n"; echo $serviceStatusMappingdict[$key] . "\n\n"; } Commented Mar 16, 2016 at 15:54

2 Answers 2

1

[EDIT] The problem is coming because of the '<' character. Get rid of them and it will work straight away

To answer the following comments that have appeared, the characters '<' and '>' in combination in html refer to an opening and closure of a tag. ex: <div>

The problem comes because the browser is trying intrepreting it as an unknow element and does not know what to do with it. If you inspect the html code of the page you'll be able to see that the information is actually there, just not properly rendered.

Sign up to request clarification or add additional context in comments.

4 Comments

The code is already available. It is just that i did not add it to the code snippet above
What do you get if you print_r($serviceStatusMappingdict) ?
It gives me: ( [0] => kakfa_ps -ef | grep kafka | grep server.properties [1] => zookeeper_ps -ef | grep zookeeper | grep zookeeper.properties [2] => schemaregistry_ps -ef | grep schema-registry | grep java [3] => influx_/sbin/service influxdb status | grep active | grep running [4] => mysql_/sbin/service mysql status | grep active | grep running [5] => cassandra_/sbin/service cassandra status | grep active | grep exited [6] => aerospike_/sbin/service aerospike status | grep active | grep running )
The problem is comming because of th '<' character. Get rid of them and it will work straight away.
0

[EDIT] Following Umpert parial answer, I tried this and it does the expected behavior. Can we have more informations on why it does not work in your case :

<?php

 $array = array( '0' => "kakfa_ps -ef | grep kafka | grep server.properties",
            '1' => "zookeeper_ps -ef | grep zookeeper | grep zookeeper.properties",
            '2' => "schemaregistry_ps -ef | grep schema-registry | grep java",
            '3' => "influx_/sbin/service influxdb status | grep active | grep running",
            '4' => "mysql_/sbin/service mysql status | grep active | grep running",
            '5' => "cassandra_/sbin/service cassandra status | grep active | grep exited",
            '6' => "aerospike_/sbin/service aerospike status | grep active | grep running");
for($i=0;$i<count($array);++$i){
  echo '<<<<<<<<<<<<<<<<<<<<<<<'.$array[$i].'>>>>>>>>>>>>>>>>>>>>>>>>>>>';
}
 ?>

Same amount of '<' and '>' as in your OP. Just to make sure.

6 Comments

This one seems to be working... i have just added commas to separate data: kakfa_ps -ef | grep kafka | grep server.properties ,,,,,,,,zookeeper_ps -ef | grep zookeeper | grep zookeeper.properties ,,,,,,,,schemaregistry_ps -ef | grep schema-registry | grep java ,,,,,,,,influx_/sbin/service influxdb status | grep active | grep running ,,,,,,,,mysql_/sbin/service mysql status | grep active | grep running ,,,,,,,,cassandra_/sbin/service cassandra status | grep active | grep exited ,,,,,,,,aerospike_/sbin/service aerospike status | grep active | grep running Count : 6
Well.. And the code snippet that you gave us is exactly what it is in your program ? Nothing is in the middle of this ?
Yes, there is nothing in between.
@AmandeepSingh can you ask Umpert for an explanation ? I would really like to know ! :)
@AmandeepSingh updated my post with a question. I don't think I'll be able to focus on my work without the answer to all this. :P
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.