Sign in to follow this  
Madhed

Why do it the easy way?

Recommended Posts

You have it easy, you are not maintaining legacy PHP code.

This is direct copy-paste from code currently in production.

Guess what is it doing. Hint: in function name.

 

    function extract_where_from_join($on_condition) {
	$where_list = array();
	
	$anal_list = array('="' => '"', '= "' => '"', "='" => "'", "= '" => "'"); 
	
	$anal_pos = FALSE;
	$anal_end_pos = FALSE;
	$found_anal_from = FALSE;
	$found_anal_to = FALSE;
	foreach ($anal_list as $anal_from => $anal_to) {
	    $anal_pos = strpos($on_condition, $anal_from);
	    if ($anal_pos !== FALSE) {
		$found_anal_from = $anal_from;
		$anal_end_pos = strpos($on_condition, $anal_to, $anal_pos + strlen($anal_from));
		if ($anal_end_pos !== FALSE) {
		    $found_anal_to = $anal_to;
		    break;
		}
	    }
	}
	
	if ($anal_pos !== FALSE && $anal_end_pos !== FALSE) {
	    $anal_value = substr($on_condition, $anal_pos + strlen($found_anal_from), $anal_end_pos - $anal_pos - strlen($found_anal_from));
	    $condition = 'and';
	    $not_space_bw_pos = strbipos($on_condition, $condition, $anal_pos);
	    if ($not_space_bw_pos === FALSE) {
		$where_list[] = array(trim(substr($on_condition, 0, $anal_pos)), $anal_value);
		$on_condition = substr($on_condition, $anal_end_pos + strlen($found_anal_to));
		if ($on_condition === FALSE) {
		    $on_condition = 'TRUE';
		}
	    } else {
		$where_list[] = array(trim(substr($on_condition, $not_space_bw_pos + strlen($condition), $anal_pos - $not_space_bw_pos -strlen($condition))), $anal_value);
		$on_condition = substr($on_condition, 0, $not_space_bw_pos) . substr($on_condition, $anal_end_pos + strlen($found_anal_to));
		if ($on_condition === FALSE) {
		    $on_condition = 'TRUE';
		}
	    }
	}
	
	return array($where_list, $on_condition);
    }

 

It turns out this is parsing SQL join statement and extracting it's condition to be used elsewhere as "where" condition. Talking about easy way?

Edited by Nercury

Share this post


Link to post
Share on other sites

Was gonna comment on the original topic, but what the— Abbreviations gone awry o_O And this is why you should avoid abbreviations except for a few well-estabilished ones...

 

As for the original topic, I find this a lot (and yes, with basic types, not classes which could have side-effects):

if (!blah)
   blah = true;

This could have easily done the job:

blah = true;

Share this post


Link to post
Share on other sites

Was gonna comment on the original topic, but what the— Abbreviations gone awry o_O And this is why you should avoid abbreviations except for a few well-estabilished ones...

 

As for the original topic, I find this a lot (and yes, with basic types, not classes which could have side-effects):

 

if (!blah)
   blah = true;

This could have easily done the job:

 

blah = true;

 

Unless it is dynamically typed language (like javascript):

 

var blah = "hello";
if (!blah)
    blah = true;

// blah remains "hello"

blah = 15;
if (!blah)
    blah = true;

// blah remains 15

blah = 0;
if (!blah)
    blah = true;

// blah is true 

 

I hate dynamically typed languages for allowing this.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this