2013-06-18 39 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

嗨Nithish,如果你有解決方案,然後接受RST的答案。不要打開這個問題 – Akilan

2

不使用$ CND部分數組中的製作和插入數據:

使用下面的代碼:

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

而這個代碼將數組追加。 或者您可以使用PHP的array_push函數。

+0

請注意''array_push'關聯數組不工作,因爲你期望(http://codepad.org/b4of4dml) –

+0

@PhpMyCoder好了,然後我可以建議'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';