用数组中的值填充PHP list()

用数组中的值填充PHP list(),php,list,arrays,Php,List,Arrays,我有一个数组: $arr = array('foo', 'bar', 'bash', 'monkey', 'badger'); 我希望该数组中的元素显示为列表()中的变量: 没有实际指定变量,我尝试了 list(implode(",$", $arr)) = $data; and list(extract($arr)) = $data; 但它们不起作用,我得到: Fatal error: Can't use function return value in write context 有人知

我有一个数组:

$arr = array('foo', 'bar', 'bash', 'monkey', 'badger');
我希望该数组中的元素显示为列表()中的变量:

没有实际指定变量,我尝试了

list(implode(",$", $arr)) = $data; and
list(extract($arr)) = $data;
但它们不起作用,我得到:

Fatal error: Can't use function return value in write context
有人知道这是否可能吗


更新:更多内容:

我从API获取CSV数据,第一行是列名,后面的每一行都是数据。我想构建一个如下所示的关联数组:

$data[0]['colname1'] = 'col1data';
$data[0]['colname2'] = 'col2data';
$data[0]['colname3'] = 'col3data';
$data[1]['colname1'] = 'col1data';
$data[1]['colname2'] = 'col2data';
$data[1]['colname3'] = 'col3data';
然而,在我这样做之前,我想确保我有所有需要的专栏。因此,我用我需要的列名构建一个数组,运行一些检查以确保CSV包含我需要的所有列。完成后,代码看起来有点像这样(对CSV中的每一行数据在foreach()上执行):

由于我已经有了一个列名数组,我认为在list函数中使用它会节省一些时间,而不是显式地输入每个变量名

数据在其他地方被清理和消毒

干杯

迈克

我希望该数组中的元素显示为列表()中的变量:

我认为你在理解上有问题。list()不会创建新的列表结构或变量,它只能用于一次分配多个变量:

$arr = array(1, 2, 3);
list($first, $second, $third) = $arr;
// $first = 1, $second = 2, $third = 3
有关更多信息,请参阅

你可能正在寻找一个合适的人选。您可以使用以下代码创建它:

$arr = array('first' => 1, 'second' => 2, 'third' => 3);
// $arr['first'] = 1, …
我希望该数组中的元素显示为列表()中的变量:

我认为你在理解上有问题。list()不会创建新的列表结构或变量,它只能用于一次分配多个变量:

$arr = array(1, 2, 3);
list($first, $second, $third) = $arr;
// $first = 1, $second = 2, $third = 3
有关更多信息,请参阅

你可能正在寻找一个合适的人选。您可以使用以下代码创建它:

$arr = array('first' => 1, 'second' => 2, 'third' => 3);
// $arr['first'] = 1, …
可以这样尝试:

$arr = array('foo', 'bar', 'bash', 'monkey', 'badger');
$data = "$".implode(",", $arr);
echo str_replace(",", ",$", $data);
可以这样尝试:

$arr = array('foo', 'bar', 'bash', 'monkey', 'badger');
$data = "$".implode(",", $arr);
echo str_replace(",", ",$", $data);

为什么不马上像你一样给Var打电话

$arr['foo']


为什么不马上像你一样给Var打电话

$arr['foo']


如果输入文件中的某些行缺少列,则无法真正知道缺少哪一列。计算值的数量并在小于预期值时中止或跳到下一行就足够了

。。。除非您设置最后一列是可选的规则。我将详细说明这一点

您的代码示例还远未完成,但您的问题似乎是,除了将列名与单元格值匹配外,您到处都在使用数组。同时也要使用数组:你不需要单独的变量,它们只会让事情变得更难。这是可能的方法之一,不一定是最好的方法,但(我希望)足够清楚:

<?php

$required_columns = array('name', 'age', 'height');
$input_data = array(
    array('John', 33, 169),
    array('Bill', 40, 180),
    array('Ashley', 21, 155),
    array('Vincent', 13), // Incomplete record
    array('Michael', 55, 182),
);
$output = array();

foreach($input_data as $row_index => $row){
    foreach($required_columns as $col_index => $column_name){
        if( isset($row[$col_index]) ){
            $output[$row_index][$column_name] = $row[$col_index];
        }
    }
}

print_r($output);

?>

为了简单起见,我使用了$row_索引和$col_索引

原始答案,仅用于历史目的;-) 我无法真正理解您的规格,但PHP功能:



现在您的脚本中有了以下可用变量:$foo,$bar。。。它毫无用处,也有潜在的危险,但它可以满足您的需要。

如果输入文件中的某些行缺少列,您就无法真正知道缺少了哪一列。计算值的数量并在小于预期值时中止或跳到下一行就足够了

。。。除非您设置最后一列是可选的规则。我将详细说明这一点

您的代码示例还远未完成,但您的问题似乎是,除了将列名与单元格值匹配外,您到处都在使用数组。同时也要使用数组:你不需要单独的变量,它们只会让事情变得更难。这是可能的方法之一,不一定是最好的方法,但(我希望)足够清楚:

<?php

$required_columns = array('name', 'age', 'height');
$input_data = array(
    array('John', 33, 169),
    array('Bill', 40, 180),
    array('Ashley', 21, 155),
    array('Vincent', 13), // Incomplete record
    array('Michael', 55, 182),
);
$output = array();

foreach($input_data as $row_index => $row){
    foreach($required_columns as $col_index => $column_name){
        if( isset($row[$col_index]) ){
            $output[$row_index][$column_name] = $row[$col_index];
        }
    }
}

print_r($output);

?>

为了简单起见,我使用了$row_索引和$col_索引

原始答案,仅用于历史目的;-) 我无法真正理解您的规格,但PHP功能:



现在您的脚本中有了以下可用变量:$foo,$bar。。。它毫无用处,而且有潜在的危险,但它可以满足您的需要。

如果您想将
$data
的元素提取到当前上下文中,可以使用。您可能会发现,首先调用
array\u intersect\u key
将$data缩减为要提取的元素是很有用的

如果要将
$data
的元素提取到当前上下文中,可以使用。您可能会发现,首先调用
array\u intersect\u key
将$data缩减为要提取的元素是很有用的

您试图以一种不应该使用的方式使用语言结构。如阿尔瓦罗所述使用

$arr = array('foo', 'bar', 'bash', 'monkey', 'badger');
foreach ($arr as $index => $key) {
    $$key = $data[$index];
}


简而言之,不要使用“列表”,而是使用数组和关联数组。编写帮助函数以使代码更清晰。

您试图以一种不需要使用的方式使用语言结构。如阿尔瓦罗所述使用

$arr = array('foo', 'bar', 'bash', 'monkey', 'badger');
foreach ($arr as $index => $key) {
    $$key = $data[$index];
}


简而言之,不要使用“列表”,而是使用数组和关联数组。编写帮助函数以使代码更清晰。

大多数情况下,这样的问题是设计不好的标志。为什么需要动态分配变量名?胡乱猜测。。。您是否正在尝试模仿register_globals?您需要什么?请解释,因为答案是通过不同的方式来理解这个问题的。弹片-没有更多的背景,你怎么能说出这样的话?也许只是帮我一把,而不是假设我无知。Alvaro-No.Karthik-请参见编辑的问题。您计划如何在以后的代码中使用动态创建的变量名?我认为你把事情复杂化了。只需使用$col1…$col10,大多数情况下,一切都会正常工作。这样的问题是糟糕设计的标志。为什么需要动态分配变量名?胡乱猜测。。。您是否正在尝试模仿register_globals?您需要什么?请解释,因为答案是通过不同的方式来理解这个问题的。弹片-没有更多的背景,你怎么能说出这样的话?也许只是帮我,而不是