多维数组与PHP
为什么这不起作用:多维数组与PHP,php,arrays,Php,Arrays,为什么这不起作用: $counter = 0; foreach($projects as $project) { $list[$counter]['id'] = $project['id']; $list[$counter]['name'] = $project['name']; $counter++; } } 我想创建一个多维数组,其中数据存储在第I个元素中(通过迭代)。数据被覆盖;出于某种原因,所有内容似乎都存储在$list[0]中(而$projects包含
$counter = 0;
foreach($projects as $project) {
$list[$counter]['id'] = $project['id'];
$list[$counter]['name'] = $project['name'];
$counter++;
}
}
我想创建一个多维数组,其中数据存储在第I个元素中(通过迭代)。数据被覆盖;出于某种原因,所有内容似乎都存储在$list[0]中(而$projects包含2个元素)。我首先尝试了这个:
foreach($projects as $project) {
$list[]['id'] = $project['id'];
$list[]['name'] = $project['name'];
}
}
但这也不行。如何做到这一点?数组在开头创建:
$list=new array()代码>最简单的方法是:
foreach($projects as $project) {
$list[] = array('id' => $project['id'],
'name' => $project['name']);
}
但第一个示例看起来“ok”。您可以尝试预先初始化阵列:
foreach($projects as $project) {
$list[$counter] = array();
$list[$counter]['id'] = $project['id'];
$list[$counter]['name'] = $project['name'];
$counter++;
}
最简单的方法是:
foreach($projects as $project) {
$list[] = array('id' => $project['id'],
'name' => $project['name']);
}
但第一个示例看起来“ok”。您可以尝试预先初始化阵列:
foreach($projects as $project) {
$list[$counter] = array();
$list[$counter]['id'] = $project['id'];
$list[$counter]['name'] = $project['name'];
$counter++;
}
$list[]
将在每次调用时添加一个元素,因此在您的(第二个)示例中,在一次迭代中添加两次
foreach($projects as $project) {
$list[] = array(
'id' => $project['id'],
'name' = $project['name');
}
$list[]
将在每次调用时添加一个元素,因此在您的(第二个)示例中,在一次迭代中添加两次
foreach($projects as $project) {
$list[] = array(
'id' => $project['id'],
'name' = $project['name');
}
在本例中,您试图访问未设置的$list[$counter],因此$list[$counter][$id]无效。首先需要将$list[$counter]定义为数组。通过$list[$counter]=array()执行;或者您可以执行$list[]=array('id'=>$project['id']
正道
$counter = 0;
foreach($projects as $project) {
$list[$counter] = array();
$list[$counter]['id'] = $project['id'];
$list[$counter++]['name'] = $project['name'];
}
更简单的方法
foreach($projects as $project) {
$list[] = array(
'id' => $project['id'],
'name' => $project['name'],
);
}
最简单的方法(不定义$projects中的内容)
这可能适用于任务,也可能不适用于任务,但如果$projects不包含任何不需要的数据,则会产生相同的结果
或
如果$projects以某种方式包含不需要的数据,并且需要对数据进行过滤,那么下面的一行也可以
$list = array_values(array_map('array_intersect_key',$projects,array_pad(array(),count($projects),array_flip(array('id','name')))));
在本例中,您试图访问未设置的$list[$counter],因此$list[$counter][$id]无效。您需要首先将$list[$counter]定义为数组。可以使用$list[$counter]=array();也可以使用$list[]=array('id'=>$project['id'])
正道
$counter = 0;
foreach($projects as $project) {
$list[$counter] = array();
$list[$counter]['id'] = $project['id'];
$list[$counter++]['name'] = $project['name'];
}
更简单的方法
foreach($projects as $project) {
$list[] = array(
'id' => $project['id'],
'name' => $project['name'],
);
}
最简单的方法(不定义$projects中的内容)
这可能适用于任务,也可能不适用于任务,但如果$projects不包含任何不需要的数据,则会产生相同的结果
或
如果$projects以某种方式包含不需要的数据,并且需要对数据进行过滤,那么下面的一行也可以
$list = array_values(array_map('array_intersect_key',$projects,array_pad(array(),count($projects),array_flip(array('id','name')))));
什么不起作用传入数据是什么样子的?什么不起作用传入数据是什么样子的?不确定你的意思,但它们都不是$list=$projects。但大家都同意,它们也不都是等价的。它不保留原始索引。所以它不一样。可能是,但这不符合要求在所有情况下都是相等的。您必须执行foreach($k=>v的项目){$list[$k]=$v;}使其相等。但这没有意义。天哪,我从来没有想过重新编制索引,你是对的。upvote。不确定你的意思,但它们都不与$list=$projects相同。但是同意,它们也不都是相等的。它不保留原始索引。因此它不相同。可能是,但这并不意味着它是相等的在所有情况下。你都必须做foreach($k=>$v的项目){$list[$k]=$v;}来使它相等。但那没有意义。天哪,我从来没有想过要重新编制索引,你是对的。向上投票。