2015-10-22 3 views
-1

У меня есть такой массив с разными ключами и значениямиarray_values ​​() не работает, как ожидалось

$input = array(
    "a" => "green", 
    "red", 
    "b" => "green", 
    'people' => array('Jane', 'Sam'), 
    array(
     'fruits' => array('orange', 'banana', 'apple'), 
     'veggie' => array('carrot', 'collard', 'pea') 
    ) 
); 
var_dump(array_values($input)); 

В результате

array (size=5) 
    0 => string 'green' (length=5) 
    1 => string 'red' (length=3) 
    2 => string 'green' (length=5) 
    3 => 
    array (size=3)       <===HERE was reindexed 
     0 => string 'Jane' (length=4) 
     1 => string 'Sam' (length=3) 
    4 => 
    array (size=2) 
     'fruits' =>       <===HERE wasn't reindexed 
     array (size=3) 
      0 => string 'orange' (length=6) 
      1 => string 'banana' (length=6) 
      2 => string 'apple' (length=5) 
     'veggie' =>       <===HERE wasn't reindexed 
     array (size=3) 
      0 => string 'carrot' (length=6) 
      1 => string 'collard' (length=7) 
      2 => string 'pea' (length=3) 

Почему ключи фруктов и VEGGIE не переиндексирован но человек был переиндексирован? Какова логика.

+0

' 'people'' не переиндексирован ..... это уже проиндексированы таким образом перед 'array_values ​​()' call –

+0

Логика заключается в том, что функция не работает для многомерных массивов – Rizier123

+2

Как и большинство функций массива, 'array_values ​​()' не рекурсивно –

ответ

1

Вы когда-нибудь видели $input без array_values()? Факт в том, что array_values ​​только переиндексирует первый уровень - остальные не меняются (= не рекурсивно). Вы просто забыли, что array('Jane', 'Sam') автоматически увеличивается до array(0=>'Jane', 1=>'Sam').

Это становится очевидным, если вы дифф два выхода:

echo "== before.txt ==\n"; 
var_dump($input); 
echo "== after.txt ==\n"; 
var_dump(array_values($input)); 

Результат

$ sdiff before.txt after.txt 
array(5) {        array(5) { 
    ["a"]=>        | [0]=> 
    string(5) "green"      string(5) "green" 
    [0]=>        | [1]=> 
    string(3) "red"       string(3) "red" 
    ["b"]=>        | [2]=> 
    string(5) "green"      string(5) "green" 
    ["people"]=>      | [3]=> 
    array(2) {        array(2) { 
    [0]=>         [0]=> 
    string(4) "Jane"      string(4) "Jane" 
    [1]=>         [1]=> 
    string(3) "Sam"       string(3) "Sam" 
    }          } 
    [1]=>        | [4]=> 
    array(2) {        array(2) { 
    ["fruits"]=>       ["fruits"]=> 
    array(3) {        array(3) { 
     [0]=>         [0]=> 
     string(6) "orange"      string(6) "orange" 
     [1]=>         [1]=> 
     string(6) "banana"      string(6) "banana" 
     [2]=>         [2]=> 
     string(5) "apple"      string(5) "apple" 
    }          } 
    ["veggie"]=>       ["veggie"]=> 
    array(3) {        array(3) { 
     [0]=>         [0]=> 
     string(6) "carrot"      string(6) "carrot" 
     [1]=>         [1]=> 
     string(7) "collard"      string(7) "collard" 
     [2]=>         [2]=> 
     string(3) "pea"       string(3) "pea" 
    }          } 
    }          } 
}          } 
Смежные вопросы