2015-11-23 2 views
1

Я имею эту Еогеасп функцию:Найти ключ в массиве в Еогеасп

foreach($total_data as $arrays){   

       //debug 
       //print_r($total_data); 
       //exit; 

       if($arrays['code']=='d_payment_fee'){ 
        $dpaymentfeetext = ' - '.$arrays['title']; 
        $dpaymentfeevalue = $arrays['value']/1.20; 
       } 

       if($arrays['code']=='shipping'){ 

          $api->addItem(array( 
            'name' => $arrays['title'].$dpaymentfeetext, 
            'quantity' => 1, 
            'unit' => 'ks', 
            'unit_price' => ($arrays['value']+$dpaymentfeevalue)*1.20 
          )); 
        } 
      }   

Это прекрасно работает, если первый элемент массива является d_payment_fee, а второй является доставка:

[0] => Array 
    (
     [order_total_id] => 214950 
     [order_id] => 4779 
     [code] => d_payment_fee 
     [title] => COD 
     [text] => 1,00€ 
     [value] => 1.0000 
     [sort_order] => 2 
    ) 

[1] => Array 
    (
     [order_total_id] => 214951 
     [order_id] => 4779 
     [code] => shipping 
     [title] => Free 
     [text] => 0,00€ 
     [value] => 0.0000 
     [sort_order] => 3 
    ) 

есть случаи, когда d_payment_fee не на первом месте, как здесь:

[0] => Array 
     (
      [order_total_id] => 216352 
      [order_id] => 4796 
      [code] => shipping 
      [title] => Free shipping 
      [text] => 2,50€ 
      [value] => 2.5000 
      [sort_order] => 2 
     ) 

    [1] => Array 
     (
      [order_total_id] => 216353 
      [order_id] => 4796 
      [code] => d_payment_fee 
      [title] => COD 
      [text] => 1,00€ 
      [value] => 1.0000 
      [sort_order] => 3 
     ) 

В этом случае я получил неопределенную переменную $ dpaymentfee *. Можно ли найти d_payment_fee, если это не на первом месте?

+0

Как выглядит ваш оригинальный массив? – Andrew

+0

Есть еще несколько предметов, но эти два являются релевантными для меня. Если вам нужно, я могу копировать здесь. – Adrian

+0

как побочное примечание, вы можете подумать об использовании 'else if' для вашего второго условия –

ответ

1

Вы всегда можете перебрать массив в два раза и выйти из первого цикла, как только вы нашли код d_payment_fee:

$dpaymentfeetext = ''; 
$dpaymentfeevalue = ''; 

foreach ($total_data as $data) 
{ 
    if ($data['code'] == 'd_payment_fee') 
    { 
     $dpaymentfeetext = ' - '.$data['title']; 
     $dpaymentfeevalue = $data['value']/1.20; 
     break; 
    } 
} 

// Then do your original loop here 
+0

Супер, я думаю, это работает! – Adrian

2

вызов addItem вне цикла, после того, как вы найдете все необходимые значения.

$fees_found = false; 
$shipping_found = false; 
foreach($total_data as $arrays){   

    if($arrays['code']=='d_payment_fee'){ 
     $dpaymentfeetext = ' - '.$arrays['title']; 
     $dpaymentfeevalue = $arrays['value']/1.20; 
     $fees_found = true; 
    } 

    elseif($arrays['code']=='shipping'){ 
     $title = $arrays['title']; 
     $value = $arrays['value']; 
     $shipping_found = true; 
    } 
    // Stop once we've found everything needed 
    if ($fees_found && $shipping_found) { 
     break; 
    } 

}   
$api->addItem(array( 
        'name' => $title.$dpaymentfeetext, 
        'quantity' => 1, 
        'unit' => 'ks', 
        'unit_price' => ($value+$dpaymentfeevalue)*1.20 
        )); 
0

Это не очень хорошо подходит для работы, но оно может решить проблему.

$index = 0; 
     $dpaymentfeetextArray = array(); 
     $dpaymentfeevalueArray = array(); 
     foreach ($total_data as $arrays) { 
      if ($arrays['code'] == 'd_payment_fee') { 
       $dpaymentfeetextArray[$index] = ' - ' .$arrays['title']; 
       $dpaymentfeevalueArray[$index] = $arrays['value']/1.20; 
       $index++; 
      } 
     } 
     $index = 0; 
     foreach ($total_data as $arrays) { 
      if ($arrays['code'] == 'shipping') { 
       $api->addItem(array(
         'name'   => $arrays['title'] .(isset($dpaymentfeetextArray[$index]) ? $dpaymentfeetextArray[$index] : ' '), 
         'quantity'  => 1, 
         'unit'   => 'ks', 
         'unit_price' => ($arrays['value'] + (isset($dpaymentfeevalueArray[$index]) ? $dpaymentfeevalueArray[$index] : 0))*1.20 
       )); 
       $index++; 
      } 
     } 
Смежные вопросы