Как преобразовать массив в массив ключ-значение? - PullRequest
1 голос
/ 18 февраля 2012

У меня есть этот массив:

array(
    0 => array("name", "address", "city"), 
    1=> array( "anoop", "palasis", "Indore"),
    2=> array( "ravinder", "annapurna", "Indore")
)

и я хочу сделать этот массив следующим образом:

array( 
    0 =>  array("name" = >"anoop" , "address" = >"palasia", "city" = >"Indore"),
    1 =>  array("name" = >"ravinder" , "address" = >"annapurna", "city" = >"Indore")
)

Ответы [ 5 ]

4 голосов
/ 18 февраля 2012

Использовать array_combine . Если $array содержит ваши данные

$result = array(
             array_combine($array[0], $array[1]),
             array_combine($array[0], $array[2])
          );

В общем

$result = array();
$len = count($array);
for($i=1;$i<$len; $i++){
    $result[] = array_combine($array[0], $array[$i]);
}
3 голосов
/ 21 января 2015

Современный способ это:

$data = array_column($data, 'value', 'key');

В вашем случае:

$data = array_column($data, 1, 0);
1 голос
/ 18 февраля 2012

Вот функция, которую вы можете использовать:

function rewrap(Array $input){
    $key_names = array_shift($input);
    $output = Array();
    foreach($input as $index => $inner_array){
        $output[] = array_combine($key_names,$inner_array);
    }
    return $output;
}

Вот демонстрация:

// Include the function from above here 
$start = array(
    0 => array("name", "address", "city"),
    1 => array("anoop", "palasis", "Indore"),
    2 => array("ravinder", "annapurna", "Indore")
);
print_r(rewrap($start));

Это выводит:

Array
(
    [0] => Array
        (
            [name] => anoop
            [address] => palasis
            [city] => Indore
        )

    [1] => Array
        (
            [name] => ravinder
            [address] => annapurna
            [city] => Indore
        )

)

Примечание: Ваш первый массив определил индекс 1 дважды, поэтому я изменил второй на 2, например:

array(0 => array("name", "address", "city"), 1 => array("anoop", "palasis", "Indore"),2 => array("ravinder", "annapurna", "Indore"))

Возможно, это просто опечатка.

1 голос
/ 18 февраля 2012

Если ваши данные в $array:

$res = array();
foreach ($array as $key=>$value) {
    if ($key == 0) {
        continue;
    }
    for ($i = 0; $i < count($array[0]); $i++) {
        $res[$array[0][$i]] = $value[$i];
    }
}

Результат теперь в $res.

0 голосов
/ 18 февраля 2012

Предполагая, что вы анализируете файл CSV, проверьте ответы на этот вопрос:

Получить ассоциативный массив из CSV

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