I have 2 codes that do the same task. 2.In the long code $sort = 'newest';
I’m throwing the variable. But in the 1st shortcode I don’t know how to assign it.
*The code to be edited is the 1st Code. (Short Code)
Short IF PHP Code
JavaScript
x
$sql_code_orderby = ( $sort == 'oldest' ? "ORDER BY Q.created ASC" : ($sort == 'votes' || ($sort == '' && $filter == 'noanswers')) ? "ORDER BY Q.vote_count DESC" : ($sort == 'viewed' ? "ORDER BY Q.viewed DESC" : "ORDER BY Q.created DESC" ) );
Long IF PHP Code
JavaScript
if( $sort == 'oldest' ){
$sql_code_orderby = "ORDER BY Q.created ASC";
} else if( $sort == 'votes' || ($sort == '' && $filter == 'noanswers') ){
$sql_code_orderby = "ORDER BY Q.vote_count DESC";
} else if( $sort == 'viewed' ){
$sql_code_orderby = "ORDER BY Q.viewed DESC";
} else {
$sort = 'newest';
$sql_code_orderby = "ORDER BY Q.created DESC";
}
My fault trial result:
JavaScript
$sql_code_orderby = ( $sort == 'oldest' ? "ORDER BY Q.created ASC" : ($sort == 'votes' || ($sort == '' && $filter == 'noanswers')) ? "ORDER BY Q.vote_count DESC" : ($sort == 'viewed' ? "ORDER BY Q.viewed DESC" : "ORDER BY Q.created DESC" . ($sort = 'newest') ) );
Advertisement
Answer
Using nested ternary expressions like the “short code” are generally considered bad practice as they are difficult to read, understand, and maintain. In a team environment, I would expect any code that uses them to be rejected in code review.
In a case like this, I’d probably use a switch statement something like the below:
JavaScript
$direction = 'DESC';
switch (true) {
case $sort === 'oldest':
$column = "created";
$direction = 'ASC';
break;
case $sort === 'votes':
case $sort === '' && $filter === 'noanswers':
$column = "vote_count";
break;
case $sort === 'viewed':
$column = "viewed";
break;
default:
$column = "created";
break;
}
$sql_code_orderby = "ORDER BY Q.$column $direction";