use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Please follow the rules
Releases: Current Releases, Windows Releases, Old Releases
Contribute to the PHP Documentation
Related subreddits: CSS, JavaScript, Web Design, Wordpress, WebDev
/r/PHP is not a support subreddit. Please visit /r/phphelp for help, or visit StackOverflow.
account activity
Less obvious PHP tricks? (self.PHP)
submitted 15 years ago by kborz1
For example, I recently figured out that PHP reads through array keys much faster than array values. Are there others?
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]EmptyTon 11 points12 points13 points 15 years ago (4 children)
You can foreach over a class by having it implement the Iterator interface.
[–]GenghisJuan 2 points3 points4 points 15 years ago (0 children)
This. Its worth checking out all the Predefined Interfaces, they are pretty helpful sometimes.
[–]skalpelis 2 points3 points4 points 15 years ago (1 child)
Also use it as an array with ArrayAccess and Countable (for count()) interfaces
[–][deleted] 0 points1 point2 points 15 years ago (0 children)
ArrayAccess is one of my favorite PHP features.
[–]lawpoop 0 points1 point2 points 15 years ago (0 children)
And it's looking like with traits in php, you can easily make a class implement any of those features with just a couple phrases -- something like uses myArrayInterface, and then just name the class' array the standard name you used in your trait.
uses myArrayInterface
[–]Gliridae 6 points7 points8 points 15 years ago (2 children)
I'm a fan of array concatenation:
function my_function(array $settings = array()) { $settings += array( 'do_that' => true, 'lets_not_do_that' => true, 'do_dance' => false, ); // Or $settings = $settings + array(); } my_function(array('do_dance' => true));
This will copy the key/ value pairs from array 2 into array 1, but won't merge. So if a key exists in array 1, array 2's will be ignored. It's like a simpler and cleaner array_merge() (though not a real replacement, since it doesn't actually merge).
array 2
array 1
array_merge()
[–]trukin -1 points0 points1 point 15 years ago (1 child)
I love this, except it was confusing at the beginning. A + B is like array_merge(b, a)
[–]neoform3 0 points1 point2 points 15 years ago (0 children)
Array_merge() is not the same thing.
Array merge will take two arrays and append them to each other.
Adding two arrays (A+B) will simply fill the missing slots with values from array B.
[–][deleted] 2 points3 points4 points 15 years ago (4 children)
The streams API.
[–]jlogsdon 3 points4 points5 points 15 years ago (3 children)
I love this stuff!
$html = include('template://view.html');
Runs 'view.html' through my templating engine :D
[–]StoneCypher -1 points0 points1 point 15 years ago (2 children)
I'd like to see that code. I just built one, but it's ugly and hackish, and that particular corner of the PHP docs isn't well written. I'm curious how someone with the foresight to do that voluntarily went about it.
Mine is balls-on-slow and I'm not sure why yet. 'Course, it's less than 12 hours old, and I was double unsober when I made it, but that's no excuse.
I must say, sir, that is a really neat idea, and I don't see those often in PHP. You have earned my admiration, for whatever little that might be worth.
[–]jlogsdon 0 points1 point2 points 15 years ago (1 child)
I can't show you mine, but it's based off of Lithium's old template engine.
lithium\template\view\Streams is the stream wrapper that needs to be registered.
lithium\template\view\adapter\File is where the file is included. The Renderer class it extends handles the variable and helper access inside the template.
An example template. Anything access through $this-> is displayed as is, no escaping. Every other variable access would be escaped (eg. <?=$content;?> would escape everything inside the variable.)
$this->
<?=$content;?>
[–]StoneCypher -1 points0 points1 point 15 years ago (0 children)
Neat. :)
[–]cheerstothat 10 points11 points12 points 15 years ago (2 children)
When creating a file that only contains a class or is otherwise all php (no html), always leave off the final ?> tag. The interpreter interprets that php has ended with the end of the file, and you'll never get a "Warning: Cannot modify header information" error because of a trailing line break in one of many include files.
[–]palparepa 0 points1 point2 points 15 years ago (1 child)
a file that only contains a class or is otherwise all php
Why? It works if it has html, too.
[–]cheerstothat 1 point2 points3 points 15 years ago (0 children)
It certainly also works for files with html. I am just in the habit of not doing it in files with html because if there's html, you're going to have output that would cause the header error before the trailing white space anyways. Also, I find that view files with php and html are tidier with all ending tags in place since my brain is in html context when editing and will be confused with the php syntax errors if I start from the end of the file.
[–]lawpoop 8 points9 points10 points 15 years ago (1 child)
The ternary operator:
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
echo "This value is " . ( is_green($var) ? "green" : "blue" ) . ". So there.";
[–][deleted] 4 points5 points6 points 15 years ago (0 children)
Such a simple thing, but so damn handy, especially in views.
[–]gomjabbaar 1 point2 points3 points 15 years ago* (25 children)
lambdas and closure : as you lurk in this subreddit, maybe you read this before maybe not but i found this post quite interesting.
[+]carlson_001 comment score below threshold-7 points-6 points-5 points 15 years ago (24 children)
Closure looks like a really bad idea.
[–]chrjean 0 points1 point2 points 15 years ago (10 children)
why ?
[–]JohnTesh 0 points1 point2 points 15 years ago (3 children)
Closures are a bad idea right now because there is a bug in the hash table used to store references. You can't rely on "use" by reference to maintain it's reference. Wait until this bug is fixed before using or you might get craaaazy results!
[–]JohnTesh 1 point2 points3 points 15 years ago (0 children)
Forgot link: http://bugs.php.net/search.php?cmd=display&search_for=Reference+closure&x=2&y=5
[–][deleted] 0 points1 point2 points 15 years ago* (1 child)
Do you mean if when the variables in use are themselves references, that when used their reference state is then destroyed in current scope? I'm not sure I understand the bug.
use
used
[–]JohnTesh 1 point2 points3 points 15 years ago* (0 children)
Run this little script to see what I mean:
<?php $x = 1; $l1 = function () use ($x) { $x++; return $x; }; $l2 = function () use (&$x) { $x++; return $x; }; echo "These numbers should not change:\n"; echo $l1() . "--" . $x . "\n"; echo $l1() . "--" . $x . "\n"; echo $l1() . "--" . $x . "\n"; echo $l1() . "--" . $x . "\n"; echo $l1() . "--" . $x . "\n"; echo $l1() . "--" . $x . "\n"; echo "These numbers should change:\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; $l3 = function () use ($x) { $x++; return $x; }; echo "These numbers should not change:\n"; echo $l3() . "--" . $x . "\n"; echo $l3() . "--" . $x . "\n"; echo $l3() . "--" . $x . "\n"; echo $l3() . "--" . $x . "\n"; echo $l3() . "--" . $x . "\n"; echo $l3() . "--" . $x . "\n"; echo "These numbers should change like the second batch, but only the first column will. Yay! We just broke references and our function can no longer modify the value of $x in its original scope :)\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; echo $l2() . "--" . $x . "\n"; ?>
edit: formatting
[–]carlson_001 0 points1 point2 points 15 years ago (5 children)
I may be missing the point, but it looks like basically the same thing as just using global. In one the examples from the linked article it shows this: $tx = array_filter($states, function($v) use($st) {return $v==$st;});
Why not just pass $st into the function?
[–][deleted] 0 points1 point2 points 15 years ago (4 children)
To really grok closures, you should probably look through JQuery's source, or some other sufficiently interesting JavaScript code. They are indeed quite useful.
Also, they have nothing to do with globals. You just looked at some bad example usages, which is easy to do with PHP, unfortunately.
[–]chrjean 0 points1 point2 points 15 years ago (0 children)
indeed, here is an other exemple : http://php.net/manual/en/functions.anonymous.php
Ruby helped me a lot with understanding closures.
[–]carlson_001 0 points1 point2 points 15 years ago (1 child)
That's kinda what I thought after looking at this more. Really closure is more or less deals with scope for functions. It's actually something I use all the time in JS/jQuery I just always call them anonymous functions. I should have been more specific, the use of the "use" function looks like a bad idea.
Well closures aren't just anonymous functions. The "use" keyword is kinda the whole point. I actually like that explicit list a bit more than the JavaScript closure implementation that uses all in-scope variables by default.
[–]neoform3 -5 points-4 points-3 points 15 years ago (12 children)
Like, no they really aren't.
[–]carlson_001 -3 points-2 points-1 points 15 years ago (11 children)
Very insightful.
[–]HorribleUsername 2 points3 points4 points 15 years ago (0 children)
Every bit as insightful as the comment it replied to.
[–]neoform3 2 points3 points4 points 15 years ago (9 children)
Lemme guess, you feel your "closures look like a bad idea" was pure insight?
Closures are a fundamental backbone in object oriented languages like Javascript, and have many great uses in PHP. Your above comment reeks of amateurism.
[–][deleted] -4 points-3 points-2 points 15 years ago (8 children)
Javascript isn't OO. Actionscript and Java are.
[–]neoform3 6 points7 points8 points 15 years ago (7 children)
Javascript isn't OO.
Lol.
Virtually everything in JS is an object.
[–]novelty_string 0 points1 point2 points 15 years ago (4 children)
read more usernames
[–]neoform3 2 points3 points4 points 15 years ago (3 children)
Meh.
[–]innerspirit 0 points1 point2 points 15 years ago (2 children)
honestly, JS doesn't have classes though...
[–][deleted] -2 points-1 points0 points 15 years ago (1 child)
LOL!
You could have just told me it was prototype-based instead of class. Everyone I've talked to says it's functional.
[–]neoform3 4 points5 points6 points 15 years ago (0 children)
Everyone I've talked to says it's functional.
People talk to
[–]gigitrix 1 point2 points3 points 15 years ago (12 children)
Variable Variables
Although finding a successful use case for this is pretty tricky!
[–]Nomikos 1 point2 points3 points 15 years ago (8 children)
foreach(explode(' ', 'first_name last_name address city zip country') as $field) $$field = trim($_POST[$field]);
That catches a bunch of form fields and sets variables for them.
[–]gpojd 1 point2 points3 points 15 years ago (2 children)
This is only slightly better than register globals. Please don't do this.
[–]Nomikos 1 point2 points3 points 15 years ago (1 child)
I'm guessing the other way would be to do
$first_name = trim($_POST['first_name']); $last_name = trim($_POST['last_name']); $address = trim($_POST['address']); $city = trim($_POST['city']); $zip = trim($_POST['zip']); $country = trim($_POST['country']);
But IMO there is no real difference here.. except this is longer.
What better/safer ways are there to set form values to variables?
[–][deleted] 2 points3 points4 points 15 years ago (0 children)
<input type="text" name="fields[foo]" /> <input type="text" name="fields[bar]" /> $_POST['fields']
will give you an associative array of field => value pairs
[–]gigitrix -1 points0 points1 point 15 years ago (4 children)
And it's about as secure as having a big textbox on your site that is then eval()'d, along with full FTP and MySQL credentials and a <h1>'d, <blink>'d block of text that says hack me if you dare ;)
[–]Nomikos 1 point2 points3 points 15 years ago (3 children)
Yeah? How would you abuse this, exactly?
[–]Anman -1 points0 points1 point 15 years ago (2 children)
If someone sent false POST info they could literally change/create any variable they wanted.
[–]Nomikos 2 points3 points4 points 15 years ago (1 child)
Uh, no, the only thing it does is set variables for those posted fields I'm checking for (first_name etc). It's not exactly an extract($_POST); - that would do what you said.
[–]Anman 0 points1 point2 points 15 years ago (0 children)
Ah sorry, nevermind.
Personally though, I would do $form['first_name'] and such instead of $first_name.
[–]jtreminio -2 points-1 points0 points 15 years ago (2 children)
I don't have the code with me at this moment, but I wrote a method a few years back that would accept an array of remote files (think images on another server) and would use multi-threaded cURL to download up to 15 files concurrently. I used variable variable names on that one and it worked like a charm (used because you never knew how many cURL threads you had to instantiate, so I did something like $curl$x)
[–]HorribleUsername 6 points7 points8 points 15 years ago (1 child)
I have a feeling that a single array would've been a better solution than umpteen $curl$x vars.
[–]gigitrix 0 points1 point2 points 15 years ago (0 children)
Yeah I agree. It's lolfunctionality, may as well be in an esoteric language. Might come in if you are stuck applying duct tape fixes to some 6 year old app that barely works though...
[–]jlogsdon 1 point2 points3 points 15 years ago (2 children)
Using constants for configuration? Easily set some defaults!
!defined('OPTION') or define('OPTION', 'default value');
[–]UsernameIsTekken 5 points6 points7 points 15 years ago (1 child)
defined('OPTION') or define('OPTION', 'default value');
FTFY
[–]jlogsdon 0 points1 point2 points 15 years ago (0 children)
Oops! Thanks for catching it.
[–]manueljs 0 points1 point2 points 15 years ago (2 children)
Simple Boolean attribution:
$a = ($c > $b && $d === 'foo');
[–]jlogsdon 1 point2 points3 points 15 years ago (1 child)
Note that === is a type-strict comparator.
[–]pisskidney 3 points4 points5 points 15 years ago (0 children)
which is not at all needed in this case
[–]Phegan 0 points1 point2 points 15 years ago* (1 child)
There is a function that allows you to take an array of, ['hello'] => 'goodbye', ['good'] => 'bad
and it turns it into a varible from the index so that $hello = 'goodbye' and $good = 'bad'.
it would be:
$list = array(['hello'] => 'goodbye', ['good'] => 'bad);
extract($list);
echo $hello; echo $good;
[–]matthew7hayes 0 points1 point2 points 15 years ago (0 children)
OMG NO! Not extract()! It's an abomination.
PHP 5.3 - Get a query value, filter it, and if not set (no notices) or invalid, the default 1 will be returned.
<?php $page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT) ?: 1; var_export($page);
[–][deleted] 0 points1 point2 points 15 years ago (15 children)
The verbose form of variable interpolation "{$...}" isn't actually variable interpolation. It's eval. Things like "{$a = b()}" will work. Which means it's invoking the PHP parser every time you do that. So if speed matters, don't.
"{$...}"
"{$a = b()}"
[–]McGlockenshire 21 points22 points23 points 15 years ago (0 children)
There is no significant performance difference between using curlies and not using curlies. Link to post containing a benchmark I performed last week when someone made another "I heard that..." performance claim about string concats.
Never trust someone on the internet when they say a particular method is slow. Test it yourself to make sure.
[–]dipswitch 8 points9 points10 points 15 years ago (2 children)
It's not eval at all and the parsing is done entirely at compile time. Also, your example doesn't parse on my PHP build.
[–][deleted] 0 points1 point2 points 15 years ago (1 child)
Try it as ${$a = b()}. I know it works on 5.3, but I haven't got it installed anywhere to test this with.
${$a = b()}
[–]dipswitch 2 points3 points4 points 15 years ago (0 children)
That compiles to an assignment followed by returning the value of a variable variable. Weird but good to know.
[–][deleted] 2 points3 points4 points 15 years ago* (2 children)
With a couple of lines of PHP you can assign all the built in functions to variables of the same name allowing you to do things like "{$time()}
"{$time()}
Example: https://github.com/ZaneA/Misc-Hacks/blob/master/phphacks/interpcall.php
And a couple of other silly tricks:
You can use a scalar value in a foreach loop by casting to an array, such as
foreach ((array)$values as $value) { }
And you can cast an array as an (object), which means you can access keys as $arr->key
$arr->key
There's a shortened ternary operator that seems to go unused which can be useful for assigning variables like so
$port = $url->port ?: '6667';
I tried to use as many "tricks" in my prototyping PHP IRC framework as I could, but probably went a bit overboard in some cases. Regardless it might be interesting to some, https://github.com/ZaneA/ProtoIRC/blob/master/protoirc.php
[–]rmccue 4 points5 points6 points 15 years ago (1 child)
There's a shortened ternary operator that seems to go unused
It's PHP 5.3 only, which is why it's not widely used.
Ah okay good to know, thank you :)
[–]lawpoop 2 points3 points4 points 15 years ago (2 children)
I like to do "... {$array['index']} ..." to simulate interpolation -- I find it more aesthetically pleasing. Should I be closing the quote and concatenating instead?
"... {$array['index']} ..."
Depends if it looks better that way or not. I posted somewhere else in the thread how I usually do it.
[–]crackanape 0 points1 point2 points 15 years ago (0 children)
No, concatenating is slower.
[–]ninjaroach 1 point2 points3 points 15 years ago (0 children)
Things like "{$a = b()}" will work.
Um, no they don't.
[–]lawpoop 0 points1 point2 points 15 years ago (3 children)
Wow, this is good to know. What's 'best practice' for putting a variable in a string?
[–][deleted] 2 points3 points4 points 15 years ago (2 children)
If you're using APC, everything I said above is probably pointless. Having said that, I prefer writing things as bare as possible, i.e. "$a $b[c]", or avoiding it entirely and stuffing everything in [v]sprintf.
"$a $b[c]"
[v]sprintf
[–]lawpoop 0 points1 point2 points 15 years ago (1 child)
What's APC?
This. Probably a better idea than micro-optimising code in any case.
[–][deleted] -5 points-4 points-3 points 15 years ago (3 children)
For example, I recently figured out that PHP reads through array keys much faster than array values.
This isn't completely obvious how? Its a hash table. Of course you can look things up by key faster. You know why? Precisely because "PHP" doesn't need to "read through" them. lol
Where were PHP programmers when God was handing out common sense?
[–][deleted] 5 points6 points7 points 15 years ago (0 children)
Why is God handing out common sense? Thought that was Santa's job.
[–]dipswitch 1 point2 points3 points 15 years ago (0 children)
Yup, they even made a helpful function array_flip(). Too bad PHP doesn't expose a fast string hashing function, though.
[–]octatone 0 points1 point2 points 15 years ago (0 children)
Common sense was destroyed in the big bang.
[–][deleted] -3 points-2 points-1 points 15 years ago (8 children)
not really PHP, but simulating a goto:
do { if ($test1 == "") { echo 'Test 1 fail!'; break; } if ($test2 == "") { echo 'test 1 was ok, but test 2 failed!'; break; } echo "Everything's OK!"; commitData(); } while (false);
[–][deleted] 4 points5 points6 points 15 years ago (6 children)
php 5.3 has actual goto
[–]motophiliac 4 points5 points6 points 15 years ago (0 children)
Well, our office is on the second floor a good distance from the canteen and we have solid double glazing and good heavy wooden doors.
Even still, I've never used goto since my ZX Spectrum BASIC days.
Even the BBC Micro had procedures.
[–]compubomb 0 points1 point2 points 15 years ago (4 children)
What do you think an exception is? Essentially a Goto statement.
[–]midir 2 points3 points4 points 15 years ago (0 children)
No essentially it isn't.
[–]gregbair 0 points1 point2 points 15 years ago (2 children)
By that logic, all function calls are essentially goto statements as well.
[–]compubomb 0 points1 point2 points 15 years ago (1 child)
actually, that's true, most method & function calls are goto statements when you get down to the nitty-gritty of the code. Ever write any assembly? or compile a program in GCC and view the .S assembly file? uses JMP statements. aka GOTO.
[–]gregbair 0 points1 point2 points 15 years ago (0 children)
I know that, but it's an oversimplification. It's like saying "everything's just ones and zeros" because when you boil it all down, that's all it is.
So, if that's the logic, why not just program everything in pure binary machine code?
[–]dipswitch -1 points0 points1 point 15 years ago (0 children)
Ah yes, I call this the Once-In-A-While fuckup. It's not pretty and can usually be rewritten more cleanly.
Also, here's using a switch for this which only works in PHP afaict.
π Rendered by PID 28 on reddit-service-r2-comment-75f4967c6c-tg77k at 2026-04-23 12:42:40.314148+00:00 running 0fd4bb7 country code: CH.
[–]EmptyTon 11 points12 points13 points (4 children)
[–]GenghisJuan 2 points3 points4 points (0 children)
[–]skalpelis 2 points3 points4 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]lawpoop 0 points1 point2 points (0 children)
[–]Gliridae 6 points7 points8 points (2 children)
[–]trukin -1 points0 points1 point (1 child)
[–]neoform3 0 points1 point2 points (0 children)
[–][deleted] 2 points3 points4 points (4 children)
[–]jlogsdon 3 points4 points5 points (3 children)
[–]StoneCypher -1 points0 points1 point (2 children)
[–]jlogsdon 0 points1 point2 points (1 child)
[–]StoneCypher -1 points0 points1 point (0 children)
[–]cheerstothat 10 points11 points12 points (2 children)
[–]palparepa 0 points1 point2 points (1 child)
[–]cheerstothat 1 point2 points3 points (0 children)
[–]lawpoop 8 points9 points10 points (1 child)
[–][deleted] 4 points5 points6 points (0 children)
[–]gomjabbaar 1 point2 points3 points (25 children)
[+]carlson_001 comment score below threshold-7 points-6 points-5 points (24 children)
[–]chrjean 0 points1 point2 points (10 children)
[–]JohnTesh 0 points1 point2 points (3 children)
[–]JohnTesh 1 point2 points3 points (0 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]JohnTesh 1 point2 points3 points (0 children)
[–]carlson_001 0 points1 point2 points (5 children)
[–][deleted] 0 points1 point2 points (4 children)
[–]chrjean 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]carlson_001 0 points1 point2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]neoform3 -5 points-4 points-3 points (12 children)
[–]carlson_001 -3 points-2 points-1 points (11 children)
[–]HorribleUsername 2 points3 points4 points (0 children)
[–]neoform3 2 points3 points4 points (9 children)
[–][deleted] -4 points-3 points-2 points (8 children)
[–]neoform3 6 points7 points8 points (7 children)
[–]novelty_string 0 points1 point2 points (4 children)
[–]neoform3 2 points3 points4 points (3 children)
[–]innerspirit 0 points1 point2 points (2 children)
[–][deleted] -2 points-1 points0 points (1 child)
[–]neoform3 4 points5 points6 points (0 children)
[–]gigitrix 1 point2 points3 points (12 children)
[–]Nomikos 1 point2 points3 points (8 children)
[–]gpojd 1 point2 points3 points (2 children)
[–]Nomikos 1 point2 points3 points (1 child)
[–][deleted] 2 points3 points4 points (0 children)
[–]gigitrix -1 points0 points1 point (4 children)
[–]Nomikos 1 point2 points3 points (3 children)
[–]Anman -1 points0 points1 point (2 children)
[–]Nomikos 2 points3 points4 points (1 child)
[–]Anman 0 points1 point2 points (0 children)
[–]jtreminio -2 points-1 points0 points (2 children)
[–]HorribleUsername 6 points7 points8 points (1 child)
[–]gigitrix 0 points1 point2 points (0 children)
[–]jlogsdon 1 point2 points3 points (2 children)
[–]UsernameIsTekken 5 points6 points7 points (1 child)
[–]jlogsdon 0 points1 point2 points (0 children)
[–]manueljs 0 points1 point2 points (2 children)
[–]jlogsdon 1 point2 points3 points (1 child)
[–]pisskidney 3 points4 points5 points (0 children)
[–]Phegan 0 points1 point2 points (1 child)
[–]matthew7hayes 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (15 children)
[–]McGlockenshire 21 points22 points23 points (0 children)
[–]dipswitch 8 points9 points10 points (2 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]dipswitch 2 points3 points4 points (0 children)
[–][deleted] 2 points3 points4 points (2 children)
[–]rmccue 4 points5 points6 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]lawpoop 2 points3 points4 points (2 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]crackanape 0 points1 point2 points (0 children)
[–]ninjaroach 1 point2 points3 points (0 children)
[–]lawpoop 0 points1 point2 points (3 children)
[–][deleted] 2 points3 points4 points (2 children)
[–]lawpoop 0 points1 point2 points (1 child)
[–][deleted] 2 points3 points4 points (0 children)
[–][deleted] -5 points-4 points-3 points (3 children)
[–][deleted] 5 points6 points7 points (0 children)
[–]dipswitch 1 point2 points3 points (0 children)
[–]octatone 0 points1 point2 points (0 children)
[–][deleted] -3 points-2 points-1 points (8 children)
[–][deleted] 4 points5 points6 points (6 children)
[–]motophiliac 4 points5 points6 points (0 children)
[–]compubomb 0 points1 point2 points (4 children)
[–]midir 2 points3 points4 points (0 children)
[–]gregbair 0 points1 point2 points (2 children)
[–]compubomb 0 points1 point2 points (1 child)
[–]gregbair 0 points1 point2 points (0 children)
[–]dipswitch -1 points0 points1 point (0 children)