2013-06-18 1 views
1

У меня есть условная строка, как это:Вставьте элемент из переменной PHP в ассоциативном массиве

echo $cnd = "'use_funds'=>'no'"; 

И мой $data массива является:

$data = array(
    $cnd, 
    'quantity' => $_POST['qty_' . $q], 
    'veg_name' => $_POST['veg_name_' . $q], 
    'rate'  => $_POST['rate_' . $q], 
    'ws_price' => $_POST['ws_price_' . $q], 
    'ret_price' => $_POST['ret_price_' . $q], 
    'mop'  => $_POST['mop_' . $q], 
    'ret_margin' => $_POST['ret_margin_' . $q] 
); 

выше echo $cnd показывает 'use_funds'=>'no', но var_dump($data) шоу array 0 => string ''use_funds'=>'no'' (length=17). И поскольку строка, которую мои данные не вставляют в мою таблицу. Как я могу сделать $cnd ассоциированным элементом массива вместо строки?

+0

Почему '$ CND 'содержать PHP-код? Разве не имело бы смысла иметь что-то вроде '$ use_funds = 'no''? –

ответ

3
if (your condition) { 
    $data['use_funds'] = 'no'; 
} else { 
    //some other code 
} 
+0

Спасибо RST ... работаю. Ребята из Stackoverflow awsm :) – Nitish

+0

Привет, Нитрис, если у вас есть решение, тогда примите ответ RST. Не открывайте этот вопрос – Akilan

2

не использовать $ CND часть, чтобы сделать и вставить данные в массиве:

Используйте следующий код:

$data['use_funds'] = 'no'; 

И этот код будет добавлять массив. ИЛИ вы можете использовать функцию array_push PHP.

+0

Обратите внимание, что 'array_push'а ассоциативный массив не работает так, как вы ожидали (http://codepad.org/b4of4dml) –

+0

@PhpMyCoder ok, Тогда я могу предложить' array_merge', создав два массива и объединить их. –

+1

Звучит лучше. +1 по предложению. –

-1

Вы можете сделать это с помощью eval

$cnd = "'use_funds'=>'no'"; 

eval("\$x = array($cnd);"); 

print_r($x); 
+0

Пожалуйста, не используйте eval, он пытается интерпретировать данную строку как код и, как таковой, очень опасен, особенно в условиях, когда строка не известна как хорошая. Лучше всего оставить это, несмотря на то, что почти всегда есть более безопасный способ получить результат. – DivinusVox

+0

'eval' использует его. эта ситуация является предопределенным вводом, поэтому проблема безопасности не возникает. мое решение не изменило ни одной из его текущих настроек. Все остальные предполагают, что он не знал о привычном добавлении ключа массива. – DevZer0

0

первую очередь вашей $cnd является строкой, а не массив. и вы пытаетесь добавить этот $cnd с массивом $data.

для добавления элемента в массив мы в основном используем метод push(). В вашем случае, если вы используете array_push метод, то вы получите выход, как показано ниже

array_push($cnd,$data); 
$data=array(
            0=>'use_funds'=>'no', 
            'quantity'=>$_POST['qty_'.$q], 
            'veg_name'=>$_POST['veg_name_'.$q], 
            'rate'=>$_POST['rate_'.$q], 
            'ws_price' => $_POST['ws_price_'.$q], 
            'ret_price' => $_POST['ret_price_'.$q], 
            'mop' => $_POST['mop_'.$q], 
            'ret_margin' =>$_POST['ret_margin_'.$q] 
); 

поэтому мой suggession будет, если вы хотите, вы хотите результат, то следуйте ниже шаг: -

either define your $cnd as an array and then use array_merge(); 
0
echo $cnd = "'use_funds'=>'no'"; 

Вышеприведенная строка рассматривает "'use_funds'=>'no'" как строку и присваивает ее $cnd. Поэтому, несмотря ни на что, он всегда остается строкой, если вы не вносите в нее никаких изменений. Ключ по умолчанию в этом случае будет 0. Таким образом, это будет как:

[0] => "'use_funds'=>'no'" 

Чтобы обойти эту проблему, вы можете сделать это:

$cnd = array('use_funds'=>'no'); 

Затем функция использования array_merge() объединить два типа этого:

array_merge($cnd, $data); 
1

Если это строка, разделите ее и добавьте в массив. http://php.net/manual/en/function.explode.php

разнесения функция принимает строку и разбивает его в массив

$my_string_split = explode('=>', $cnd); 
// returns [0 => 'use_funds', 1 => 'no'] 
$data[$my_string_split[0]] = $my_string_split[1]; 

Если это не нужно быть строкой, сделайте это в буквальном смысле:

$data['use_funds'] = 'no'; 
Смежные вопросы