2016-10-05 2 views
0
array (
    0 => 
    array (
    'label' => '1', 
    'index' => 1, 
    'product_attributes' => 
    array (
     0 => 
     array (
     'type' => 'product', 
     'id' => 1, 
     'label' => 'Size', 
     'placeholder' => 'Select Size', 
     'description' => '', 
     'defaultValue' => 
     array (
      'text' => 'Size32', 
      'price' => '22', 
      'isSelected' => false, 
     ), 
     'choices' => 
     array (
      0 => 
      array (
      'text' => 'Size30', 
      'price' => '20', 
      'isSelected' => 'true', 
     ), 
      1 => 
      array (
      'text' => 'Size32', 
      'price' => '22', 
      'isSelected' => false, 
     ), 
     ), 
     'conditionalLogic' => '', 
    ), 
     1 => 
     array (
     'type' => 'product', 
     'id' => 2, 
     'label' => 'Color', 
     'placeholder' => 'Select Color', 
     'description' => 'DEsc', 
     'defaultValue' => 
     array (
      'text' => 'Black', 
      'price' => '5', 
      'isSelected' => 'false', 
     ), 
     'choices' => 
     array (
      0 => 
      array (
      'text' => 'Black', 
      'price' => '5', 
      'isSelected' => 'false', 
     ), 
      1 => 
      array (
      'text' => 'Green', 
      'price' => '6', 
      'isSelected' => 'false', 
     ), 
      2 => 
      array (
      'text' => 'Blue', 
      'price' => '4', 
      'isSelected' => 'true', 
     ), 
      3 => 
      array (
      'text' => 'White', 
      'price' => '1', 
      'isSelected' => 'false', 
     ), 
     ), 
     'conditionalLogic' => '', 
    ), 
     2 => 
     array (
     'type' => 'product', 
     'id' => 3, 
     'label' => 'Fit', 
     'placeholder' => 'Select Fit', 
     'description' => 'Select Fit', 
     'defaultValue' => 
     array (
     ), 
     'choices' => 
     array (
      0 => 
      array (
      'text' => 'Slim', 
      'price' => '2', 
      'isSelected' => false, 
     ), 
      1 => 
      array (
      'text' => 'Regular', 
      'price' => '3', 
      'isSelected' => false, 
     ), 
      2 => 
      array (
      'text' => 'Casual', 
      'price' => '5', 
      'isSelected' => false, 
     ), 
     ), 
     'conditionalLogic' => '', 
    ), 
    ), 
    'total_product_cost' => '$27.00', 
    'total_product_price' => '27.00', 
    'product_id' => '36', 
), 
    1 => 
    array (
    'label' => 'label21', 
    'total_product_cost' => '$27.00', 
    'total_product_price' => '27.00', 
    'index' => 3, 
    'product_id' => '36', 
    'product_attributes' => 
    array (
     0 => 
     array (
     'type' => 'product', 
     'id' => 1, 
     'label' => 'Size', 
     'placeholder' => 'Select Size', 
     'description' => '', 
     'defaultValue' => 
     array (
      'text' => 'Size32', 
      'price' => '22', 
      'isSelected' => false, 
     ), 
     'choices' => 
     array (
      0 => 
      array (
      'text' => 'Size30', 
      'price' => '20', 
      'isSelected' => 'true', 
     ), 
      1 => 
      array (
      'text' => 'Size32', 
      'price' => '22', 
      'isSelected' => false, 
     ), 
     ), 
     'conditionalLogic' => '', 
     'conditionalLogic2' => 
     array (
      'actionType' => 'show', 
      'logicType' => 'all', 
      'checkbox' => true, 
      'rules' => 
      array (
      0 => 
      array (
       'fieldId' => 2, 
       'operator' => 'is', 
       'value' => 'Black', 
      ), 
     ), 
     ), 
    ), 
     1 => 
     array (
     'type' => 'product', 
     'id' => 2, 
     'label' => 'Color', 
     'placeholder' => 'Select Color', 
     'description' => 'DEsc', 
     'defaultValue' => 
     array (
      'text' => 'Black', 
      'price' => '5', 
      'isSelected' => 'false', 
     ), 
     'choices' => 
     array (
      0 => 
      array (
      'text' => 'Black', 
      'price' => '5', 
      'isSelected' => 'false', 
     ), 
      1 => 
      array (
      'text' => 'Green', 
      'price' => '6', 
      'isSelected' => 'false', 
     ), 
      2 => 
      array (
      'text' => 'Blue', 
      'price' => '4', 
      'isSelected' => 'true', 
     ), 
      3 => 
      array (
      'text' => 'White', 
      'price' => '1', 
      'isSelected' => 'false', 
     ), 
     ), 
     'conditionalLogic' => '', 
    ), 
     2 => 
     array (
     'type' => 'product', 
     'id' => 3, 
     'label' => 'Fit', 
     'placeholder' => 'Select Fit', 
     'description' => 'Select Fit', 
     'defaultValue' => 
     array (
     ), 
     'choices' => 
     array (
      0 => 
      array (
      'text' => 'Slim', 
      'price' => '2', 
      'isSelected' => false, 
     ), 
      1 => 
      array (
      'text' => 'Regular', 
      'price' => '3', 
      'isSelected' => false, 
     ), 
      2 => 
      array (
      'text' => 'Casual', 
      'price' => '5', 
      'isSelected' => false, 
     ), 
     ), 
     'conditionalLogic' => '', 
    ), 
    ), 
), 
) 

Я разместил значение моего массива. Эти значения являются динамическими. Вот два массива conditionalLogic и conditionalLogic2 Я хочу назначить эти ключи массива conditionalLogic2 и значение должно быть присвоено conditionalLogic. После присвоения значений conditionalLogic в conditionalLogic2 удалите этот ключ из списка массивов.PHP присваивает одно значение массива другому массиву

Check Я попробовал этот путь, но не работает -

// $data['values'] array I have posted above 
foreach ($data['values'] as $products) { 
    foreach ($products['product_attributes'] as $product_choices) { 
     if (!empty($product_choices['conditionalLogic2']) && $product_choices['conditionalLogic'] == '') { 
      $product_choices['conditionalLogic'] = $product_choices['conditionalLogic2']; 
      unset($product_choices['conditionalLogic2']); 
     } 
    } 
} 
var_export($data['values']); exit; 

Пожалуйста, помогите мне и дать мне какое-либо решение, как заменить значение массива в другой массив.

Какова кратчайший путь для решения этой проблемы?

+0

Что такое '$ данных [«ценности»]' Я не вижу ничего назвать то, что в вашей структуре данных – RiggsFolly

+0

Во-первых, когда вы цикл в течение некоторого массива, вы работаете с копией элемента, а не самого элемента. Чтобы работать с элементом, вам нужно ссылаться на него 'foreach ($ data ['values'] as & $ products) {'. – sevavietl

+0

'$ data ['values']' данные идут выше формата массива – Chinmay235

ответ

1

Это, как правило, лучше избегать вложенных циклов:

foreach ($data as &$datum) { 
    if (!isset($datum['product_attributes'])) { 
     continue; 
    } 

    $datum['product_attributes'] = array_map(function ($productAttribute) { 
     if (
      !empty($productAttribute['conditionalLogic2']) 
      && empty($productAttribute['conditionalLogic']) 
     ) { 
      $productAttribute['conditionalLogic'] = $productAttribute['conditionalLogic2']; 
      unset($productAttribute['conditionalLogic2']); 
     } 

     return $productAttribute; 
    }, $datum['product_attributes']); 
} 

Здесь я использовал array_map() функцию, чтобы назначить новые массивы непосредственно.

Here is working example.

+1

:) :) :) :) У ОП не получается понять, как обрабатывать довольно простой массив. И у вас есть хорошая идея бросить ___annonymous функции в качестве параметров для другого funtion на них___. Ну, я думаю, это просто продемонстрировать, насколько вы умны, а не окажете большую помощь OP – RiggsFolly

+0

Я видел ваш ответ. ваш пример работает нормально. Но моя местная меха не работает нормально. Я получаю это сообщение об ошибке - 'Уведомление (8): Undefined index: product_attributes [APP \ Controller \ OrdersController.php, строка 378] Предупреждение (2): array_map() [function.array-map]: Аргумент № 2 должен быть массив [APP \ контроллер \ OrdersController.php, строка 378] Примечание (8): Не определено индекс: product_attributes [APP \ контроллер \ OrdersController.php, строка 378] Предупреждение (2): array_map() [ function.array-map]: Аргумент # 2 должен быть массивом [APP \ Controller \ OrdersController.php, строка 378] ' – Chinmay235

+0

@Chinu Кажется, что некоторые из ваших массивов не имеют' 'product_attributes'', я обновлю код в секунду. – sevavietl

0

@chinu Вы фактически назначаете или изменяете локальные переменные, где область ограничений ограничена внутри цикла цикла, поэтому в этом случае мы должны использовать pass by reference.

Смотрите следующий код, он будет работать:

foreach ($data['values'] as &$products) { 
    foreach ($products['product_attributes'] as &$product_choices) {   
     if (!empty($product_choices['conditionalLogic2']) && $product_choices['conditionalLogic'] == '') { 
      $product_choices['conditionalLogic'] = $product_choices['conditionalLogic 
+0

Почему OP« попробуй это »? ** Хороший ответ ** всегда будет иметь объяснение того, что было сделано и почему так было сделано, не только для ОП но для будущих посетителей SO, которые могут найти этот вопрос и прочитать ваш ответ. – RiggsFolly

+0

Спасибо @RiggsFolly, обновил мой комментарий. –

+0

Что случилось с остальной частью его кода.Большинство новичков, как и мы, стараются как можно проще понять ответ. Если вы уходите на много, чтобы иммагировать, они не понимают. – RiggsFolly

1

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

foreach ($data['values'] as & $products) { 
    foreach ($products['product_attributes'] as & $product_choices) { 
     if (!empty($product_choices['conditionalLogic2']) && $product_choices['conditionalLogic'] == '') { 
      $product_choices['conditionalLogic'] = $product_choices['conditionalLogic2']; 
      unset($product_choices['conditionalLogic2']); 
     } 
    } 
} 
unset($products); 
unset($product_choices); 

Если есть конец текущей области функции, как unset может быть опущен. Но вы можете удалить ссылки из массива явно, чтобы избежать нежелательных аффектов в некотором коде ниже в той же области. То есть $products = 10; где-то внизу раздавит вашу последнюю ветвь массива.

+0

Этот код работает, чтобы работать с вашим текущим IF – RiggsFolly

+0

Не уверен, почему у вас есть 2 'unset()' в конце, хотя – RiggsFolly

+0

@RiggsFolly Я прокомментировал этот аспект в своем ответе –

Смежные вопросы