This code :
for ($p=0;$p
foreach ($results[$p] as $k => $v){
$typeee = ['type' => strtolower(str_replace('_','',$results[$p][$k]['metric']))."container"];
array_insert2($results[$p],0,$typeee);
}
}
print_r($results);
gives me this:
Array (
[0] => Array
(
[type] => pagestoriescontainer
[0] => Array
(
[type] => pagestories
[object_id] => 123456778
[metric] => page_stories
[end_time] => 1386057600
[period] => 86400
[value] => 2090
)
[1] => Array
(
[type] => pagestorytellers
[object_id] => 123456778
[metric] => page_storytellers
[end_time] => 1386057600
[period] => 86400
[value] => 2041
)
[...]
[1] => Array
(
[0] => Array
(
[type] => pagestories
[object_id] => 199193463123456778
[metric] => page_stories
[end_time] => 1386057600
[period] => 86400
[value] => 0
)
[1] => Array
(
[type] => pagestorytellers
[object_id] => 199193463123456778
[metric] => page_storytellers
[end_time] => 1386057600
[period] => 86400
[value] => 0
)
[...]
But this code:
for ($p=0;$p
foreach ($results[$p] as $k => $v){
$typeee = ['type' => strtolower(str_replace('_','',$results[$p][$k]['metric']))."container"];
array_insert2($results[$p],$k,$typeee);
}
}
DOES NOT give me this:
Array (
[0] => Array
(
[type] => pagestoriescontainer
[0] => Array
(
[type] => pagestories
[object_id] => 123456778
[metric] => page_stories
[end_time] => 1386057600
[period] => 86400
[value] => 2090
)
[type] => pagestorytellerscontainer
[1] => Array
(
[type] => pagestorytellers
[object_id] => 123456778
[metric] => page_storytellers
[end_time] => 1386057600
[period] => 86400
[value] => 2041
)
[...]
[1] => Array
(
[type] => pagestoriescontainer
[0] => Array
(
[type] => pagestories
[object_id] => 199193463123456778
[metric] => page_stories
[end_time] => 1386057600
[period] => 86400
[value] => 0
)
[type] => pagestorytellerscontainer
[1] => Array
(
[type] => pagestorytellers
[object_id] => 199193463123456778
[metric] => page_storytellers
[end_time] => 1386057600
[period] => 86400
[value] => 0
)
[...]
Why? How can I get what I want? :)
Also,
function array_insert2 (&$array, $position, $insert_array) {
$first_array = array_splice ($array, 0, $position);
$array = array_merge ($first_array, $insert_array, $array);
}
解决方案
array_insert2's second param is the position. In the first code you are actually giving it an integer making it a valid position ( $p, combined with the array_splice function ).
In the second piece of code, the position supplied to array_insert2 is the key ( $k ) from the foreach loop on $results[$p]. The key given cannot be used correctly with the array_splice function. Maybe instead of supplying $k, give the array_search result of $k in $results[$p].
short-answer:
The position supplied in the second piece of code is not an integer, making it not usable for the array_splice function.