0

並べ替え配列を処理する関数でこの問題を解決しようとしています。

これは私が持っているものです:

これは私の呼び出し関数です:

_inline_entity_form_bulk_value_fixing($operations);

そして、私の定義した関数はそのようなものです($retは結果を返すヘルパーです)

function _inline_entity_form_bulk_value_fixing(&$operations, &$ret = array()) {

だから $operations 配列にはこれがあります

Array
    (
        [0] => Array
            (
                [field] => field_colors
                [values] => Array
                    (
                        [90] => 90
                        [89] => 89
                        [92] => 92
                    )

                [volume] => 3
            )

        [1] => Array
            (
                [field] => field_size
                [values] => Array
                    (
                        [86] => 86
                        [85] => 85
                    )

                [volume] => 2
            )

    )

そして、私はこのようなものを手に入れたいです。

array
 (
  [0] => array(
     [field_colors] => array( [values] => array( [90] => 90 ) )
     [field_size] => array( [values] => array( [86] => 86 ) )
  )
  [1] => array(
     [field_colors] => array( [values] => array( [89] => 89 ) )
     [field_size] => array( [values] => array( [86] => 86 ) )
  )
  [2] => array(
     [field_colors] => array( [values] => array( [92] => 92 ) )
     [field_size] => array( [values] => array( [86] => 86 ) )
  )
  [3] => array(
     [field_colors] => array( [values] => array( [90] => 90 ) )
     [field_size] => array( [values] => array( [85] => 85 ) )
  )
  [4] => array(
     [field_colors] => array( [values] => array( [89] => 89 ) )
     [field_size] => array( [values] => array( [85] => 85 ) )
  )
  [5] => array(
     [field_colors] => array( [values] => array( [92] => 92 ) )
     [field_size] => array( [values] => array( [85] => 85 ) )
  )
)

foreach と extras 関数を試していましたが、できません。

前もって感謝します。

編集:

これが私の配列を注文するための私の関数 foreach である解決策を見つけました。誰かが他の解決策をより簡単に見つけた場合は、遠慮なく投稿してください。

function _inline_entity_form_bulk_value_fixing($operations, array &$ret, $child = 0) {

  // This entry was weird.
  if (empty($operations) && !is_array($operations)) {
    return;
  }
  $end_level = FALSE;
  foreach ($operations as $value) {
    array_shift($operations);

    // The controler child tell me when is a full top item.
    if (is_array($value['values']) && !$end_level) {
      foreach ($value['values'] as $kvalues) {

        if (!empty($ret) && $child === 1) {

          $current_ret = end($ret);
          $current_ret_key = key($ret);

          $ret[$current_ret_key] = $current_ret + array(
            $value['field'] => array(
              LANGUAGE_NONE => array('#value' => array($kvalues => $kvalues)),
            ),
          );

          $child = 2;
        }
        elseif (!empty($ret) && $child === 2) {
          $ret[] = $current_ret + array(
            $value['field'] => array(
              LANGUAGE_NONE => array('#value' => array($kvalues => $kvalues)),
            ),
          );
        }
        else {
          $ret[] = array(
            $value['field'] => array(
              LANGUAGE_NONE => array('#value' => array($kvalues => $kvalues)),
            ),
          );
        }

        if (!empty($operations) && is_array($operations)) {
          _inline_entity_form_bulk_value_fixing($operations, $ret, 1);
        }
      }
    }

    $end_level = TRUE;
  }

  return $ret;
}
4

1 に答える 1