php array_map 将第一个键原本是一个的时候改为零
php array_map changes the first key to zero when it was originally one
我有一个数组,其中第一个键以 1 开头,我需要它。
//first iteration of $collections
$collections[1] = $data1;
$collections[2] = $data2;
...
//It does not have to start with zero for my own purposes
所以我做了这样需要的事情:
//count($collections) = 56;
$collections = array_map(function($array)use($other_vars){
//more stuff here
//finally return:
return $arr + ['newVariable'=$newVal];
},$collections);
当var_dump($collections);
第一个键是one时,可以。
但是,当我想像这样向数组添加另一个变量时:
//another array starting at one //count($anotherArray) = 56;
$anotherArray[] = ['more'=>'values'];
$collections = array_map(function($arr,$another)use($other_vars){
//more stuff here
//finally return:
return $arr + ['newVariable'=$newVal,'AnotherVar'=>$another['key']];
},$collections,$anotherArray);
然后,如果我再次迭代 $collections,它现在从零开始。为什么?如何让它在第一个键中从 1 而不是 0 开始?
有什么想法吗?
那么为什么第一个键变成了零呢?我怎样才能保持它是一个?
您可以通过执行以下代码 (for example on php online) 重现该问题:
$collections[1]=['data1'=>'value1'];
$collections[2]=['data2'=>'value2'];
$collections[3]=['data3'=>'value3'];
$collections[4]=['data4'=>'value4'];
$another[1]=['AnotherData'=>'AnotherVal1'];
$another[2]=['AnotherData'=>'AnotherVal2'];
$another[3]=['AnotherData'=>'AnotherVal3'];
$another[4]=['AnotherData'=>'AnotherVal4'];
var_dump($collections);
echo '<hr>';
var_dump($another);
echo '<hr>';
$grandcollection=array_map(function($a){
return $a + ['More'=>'datavalues'];
},$collections);
var_dump($grandcollection);
echo '<hr>';
$grandcollection2 = array_map(function($a,$b){
return $a + ['More'=>'datavalues','yetMore'=>$b['AnotherData']];
},$collections,$another);
var_dump($grandcollection2);
现在添加
建议的解决方案
echo '<hr>';
array_unshift($grandcollection2, null);
unset($grandcollection2[0]);
var_dump($grandcollection2);
它现在可以正常工作
创建 $collections
后,使用垃圾值取消移动数组,然后将其删除:
array_unshift($collections, null);
unset($collections[0]);
这会将所有内容向下移动一个,将第一个实数元素移动到索引 1。
我有一个数组,其中第一个键以 1 开头,我需要它。
//first iteration of $collections
$collections[1] = $data1;
$collections[2] = $data2;
...
//It does not have to start with zero for my own purposes
所以我做了这样需要的事情:
//count($collections) = 56;
$collections = array_map(function($array)use($other_vars){
//more stuff here
//finally return:
return $arr + ['newVariable'=$newVal];
},$collections);
当var_dump($collections);
第一个键是one时,可以。
但是,当我想像这样向数组添加另一个变量时:
//another array starting at one //count($anotherArray) = 56;
$anotherArray[] = ['more'=>'values'];
$collections = array_map(function($arr,$another)use($other_vars){
//more stuff here
//finally return:
return $arr + ['newVariable'=$newVal,'AnotherVar'=>$another['key']];
},$collections,$anotherArray);
然后,如果我再次迭代 $collections,它现在从零开始。为什么?如何让它在第一个键中从 1 而不是 0 开始? 有什么想法吗?
那么为什么第一个键变成了零呢?我怎样才能保持它是一个?
您可以通过执行以下代码 (for example on php online) 重现该问题:
$collections[1]=['data1'=>'value1'];
$collections[2]=['data2'=>'value2'];
$collections[3]=['data3'=>'value3'];
$collections[4]=['data4'=>'value4'];
$another[1]=['AnotherData'=>'AnotherVal1'];
$another[2]=['AnotherData'=>'AnotherVal2'];
$another[3]=['AnotherData'=>'AnotherVal3'];
$another[4]=['AnotherData'=>'AnotherVal4'];
var_dump($collections);
echo '<hr>';
var_dump($another);
echo '<hr>';
$grandcollection=array_map(function($a){
return $a + ['More'=>'datavalues'];
},$collections);
var_dump($grandcollection);
echo '<hr>';
$grandcollection2 = array_map(function($a,$b){
return $a + ['More'=>'datavalues','yetMore'=>$b['AnotherData']];
},$collections,$another);
var_dump($grandcollection2);
现在添加
echo '<hr>';
array_unshift($grandcollection2, null);
unset($grandcollection2[0]);
var_dump($grandcollection2);
它现在可以正常工作
创建 $collections
后,使用垃圾值取消移动数组,然后将其删除:
array_unshift($collections, null);
unset($collections[0]);
这会将所有内容向下移动一个,将第一个实数元素移动到索引 1。