Array PHP çoklu anahtar-değer aramalarını Filtreleme

0 Cevap php

Ben gelişmiş form tasarımı / mantık / işlenmesi için bir wordpress eklentisi kullanıyorum, ve bunun bir (büyük) olumsuzlukları var bu form verilerini sağlayan garip bir yoldur. Veriler, her bir alan için, iki ya da üç öğe içeren bir dizi verilmiştir.

Bu gizli bir alan ise:

  1. $$$n => id - n şeklinde alanın sipariş ve ADI adı / kimliği olduğu.
  2. id => value - id nerede isim / id ve değeri değerdir.

Görünür bir alan varsa:

  1. $$$n => LABEL - n şeklinde alanın sipariş ve ETİKET insan okunabilir etiket olduğu.
  2. $$$id => LABEL - id alanın adı / kimliği olduğu
  3. LABEL => value - değer ben aslında ne istediklerini nerede.

Ben bu felaket dizi tüketmek ve her alan için bir tek id => value çifti ile basit bir dönecek bir fonksiyon yazmaya çalışıyorum.

Örneğin, bu almak (alanların sırası garanti edilemez) olacaktır:

array(
    '$$$1' => 'command',
    'command' => 'signup',
    '$$$2' => 'First Name',
    '$$$firstname' => 'First Name',
    'First Name' => 'John',
    '$$$3' => 'Email Address',
    '$$$email' => 'Email Address',
    'Email Address' => 'john@example.com'
);

Ve dönüş:

array(
    'command' => 'signup',
    'email' => 'john@example.com',
    'firstname' => 'John'
);

This code works, but feels very awkward. Can you help refine it? Teşekkürler! (Benim strateji onlar tüm formları için aynı konum ve belirli bir alan gizli olup olmadığını söylemek için basit bir yolu yoktur beri $$$n alanların her şeyi ama göz ardı etmektir.)

function get_cforms_data($cformsdata) {
$data = array();
foreach ($cformsdata as $key => $value) {
    if (strpos($key, '$$$') === 0) {
        $newkey = substr($key, 3);
        if (is_numeric($newkey)) {
            $keys = array_keys($cformsdata, $value);
            if (count($keys) == 1) {
                // must be a hidden field - NAME only appears once
                $data[$value] = $cformsdata[$value];
            } else {
                // non-hidden field.  Isolate id.
                foreach($keys as $k) {
                    if ($k == $key) {
                        // $$$n - ignore it
                        continue;
                    } else {
                        // $$$id
                        $k = substr($k, 3);
                        $data[$k] = $cformsdata[$value];
                    }
                }
            }
        }
    }
}
return $data;
}

0 Cevap