Массив, извлечь значение из ключа массива и сгруппировать вместе - PullRequest
0 голосов
/ 31 мая 2011

Используя Sencha Touch (не важно для вопроса), нижний массив данных отправляется в мой PHP-скрипт.

["slider3"]     =>  1
["toggle3"]     =>  0
["text3"]       =>  "text"
["slider8"]     =>  5
["toggle8"]     =>  0
["text8"]       =>  "text"
["slider11"]    =>  4
["toggle11"]    =>  0
["text11"]      =>  "text"
["slider4"]     =>  1
["toggle4"]     =>  0
["text4"]       =>  "text"

Как вы можете видеть, Array немного «странный» вощущение, что не существует логического идентификатора типа (1 -> 2 -> 3).Вместо этого есть имя поля ввода (из Sencha) с номером, добавленным к этой строке.

Число, которое вы видите в конце клавиши (3, 8, 11, 4), являются действительными идентификаторами«данных».

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

[0]

    ["questionid"]  =>  3 (<- Number on the end of the original key)
    ["toggle"]      =>     value from toggle3
    ["slider"]      =>  value from slider3
    ["text"]        =>  value form text3

[1]

    ["questionid"]  =>  8 (<- Number on the end of the original key)
    ["toggle"]      =>  value from toggle8
    ["slider"]      =>  value from slider8
    ["text"]        =>  value from text8

etc.

Или другими словами, я хочу сгруппировать данные с тем же идентификатором в конце KEYвместе в новом массиве.

Кто-нибудь получил представление о том, как справиться с этим?

1 Ответ

3 голосов
/ 31 мая 2011

Попробуйте:

<?php
$data = array(
    "slider3"     =>  1,
    "toggle3"     =>  0,
    "text3"       =>  "text",
    "slider8"     =>  5,
    "toggle8"     =>  0,
    "text8"       =>  "text",
    "slider11"    =>  4,
    "toggle11"    =>  0,
    "text11"      =>  "text",
    "slider4"     =>  1,
    "toggle4"     =>  0,
    "text4"       =>  "text",
);

$newData = array();
foreach ($data as $entryKey => $entry) {
    if (preg_match('/^(.+?)(\d+)$/', $entryKey, $matches)) {
        list(, $key, $id) = $matches;

        if (!isset($newData[$id])) {
            $newData[$id] = array(
                'questionid' => $id
            );
        }

        $newData[$id][$key] = $entry;
    }
}

$newData = array_values($newData);
print_r($newData);

Вывод :

Array
(
    [0] => Array
        (
            [questionid] => 3
            [slider] => 1
            [toggle] => 0
            [text] => text
        )

    [1] => Array
        (
            [questionid] => 8
            [slider] => 5
            [toggle] => 0
            [text] => text
        )

    [2] => Array
        (
            [questionid] => 11
            [slider] => 4
            [toggle] => 0
            [text] => text
        )

    [3] => Array
        (
            [questionid] => 4
            [slider] => 1
            [toggle] => 0
            [text] => text
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...