多维数组与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;}来使它相等。但那没有意义。天哪,我从来没有想过要重新编制索引,你是对的。向上投票。