Norman
Norman

Reputation: 6365

Concatenate two variables

Here's what I'm trying to do:

$errmsg_1 = 'Please make changes to your post';
$errmsg_2 = 'Please make changes to your post image';

$error = 1;

echo $errmsg_.$error; //'Please make changes to your post';

Nothing will work, and there are many error messages like these ones that I have to echo.

Can anyone help?

Upvotes: 2

Views: 2309

Answers (10)

SDC
SDC

Reputation: 14212

What you're asking for is known as a variable variable -- see http://uk.php.net/manual/en/language.variables.variable.php for more info.

But please don't do that; it's considered very poor coding practice.

What you actually need is an array:

$errmsg = array(
    'Please make changes to your post',       //this will be $errmsg[0]
    'Please make changes to your post image'  //this will be $errmsg[1]
);

$error = 0;   //nb: arrays start at item number 0, not 1.

echo $errmsg[$error];

That's much better coding practice than messing around with variable variables.

Upvotes: 11

Kuf
Kuf

Reputation: 17846

Use arrays. keep the indexes for easy future reference, as well as easy error message changing and organized API.

$errmsg = array(
    1 => 'Please make changes to your post',
    2 => 'Please make changes to your post image'
);

$error = 1;

echo $errmsg[$error]; //'Please make changes to your post';

Upvotes: 0

Bojangles
Bojangles

Reputation: 101533

Try

echo {'$errmsg_' . $error};

Although you're doing this really rather incorrectly. You should be using an array instead; concatenating variable names is bad practice and leads to messy/unreadable/broken code. Using an array would work like this:

$errors = array(
    'Please make changes to your post',
    'Please make changes to your post image'
);

echo $errors[$error];

Although bear in mind that $error starts from 0 as arrays are 0-index based.

Upvotes: 4

Kermit
Kermit

Reputation: 34063

This should work:

$errmsg_1 = 'Please make changes to your post';
$errmsg_2 = 'Please make changes to your post image';

$error = 1;

echo ${'errmsg_ ' . $error};

Upvotes: 1

Teena Thomas
Teena Thomas

Reputation: 5239

$error_msg = 'Please make changes to your ';
$error[1] = 'post';
$error[2] = 'post image';

for($i=1; $i<=count($error); $i++)
 echo $error_msg . $error[$i];

Upvotes: 0

user1477388
user1477388

Reputation: 21440

You're trying to do this:

function errorMsg($code)
{
  $msg;
  switch($code)
  {
  case 1:
    $msg = 'Please make changes to your post';
    break;

  case 2:
    $msg = 'Please make changes to your post image';
    break;
  }
  return $msg;
}

echo errorMsg(1);

Upvotes: 0

Andy
Andy

Reputation: 50630

Try using this ${$errmsg_.$error}

This is a variable variable: http://php.net/manual/en/language.variables.variable.php

Upvotes: 0

Zeritor
Zeritor

Reputation: 313

No offence meant but what you're doing is bad design.

A small but no means perfect solution would be store your errors as an Array.

$errors = array('Please make changes to your post', 'Please make changes to your post image');
$error = 0;
echo $errors[$error];

Upvotes: 0

doktorgradus
doktorgradus

Reputation: 627

Store error messages in array:

$errmsg[1] = 'Please make changes to your post';
$errmsg[2] = 'Please make changes to your post image';

// and so on

$error = 1;

echo $errmsg[$error];

Upvotes: 6

David Grenier
David Grenier

Reputation: 1241

Off the top of my head I think you want $errmsg_{$error}, but I'm not in a position to test/double check that right now.

Upvotes: 3

Related Questions