【问题标题】:set fixed string value until next detected change in foreach php设置固定的字符串值,直到下一次检测到 foreach php 中的更改
【发布时间】:2022-11-29 02:27:36
【问题描述】:

我有一个包含如下数据的 CSV: (出于某种原因,在我发布问题后表格无法正确显示,所以这里是问题编辑屏幕的屏幕截图) 我试图将它转换成数组以获得这样的数据:

Array
(
    [0] => Array
        (
            [code] => PRODUCTID1
            [name] => HONDA
            [country] => JAPANESE
        )

    [1] => Array
        (
            [code] => PRODUCTID2
            [name] => TOYOTA
            [country] => JAPANESE
        )

    [2] => Array
        (
            [code] => PRODUCTID3
            [name] => NISSAN
            [country] => JAPANESE
        )

    [3] => Array
        (
            [code] => PRODUCTID4
            [name] => BMW
            [country] => GERMAN
        )

    [4] => Array
        (
            [code] => PRODUCTID5
            [name] => AUDI
            [country] => GERMAN
        )

    [5] => Array
        (
            [code] => PRODUCTID6
            [name] => MERCEDES
            [country] => GERMAN
        )
)

在下一次检测到更改之前,如何将每一行的 $country 字符串设置为相同?

显然,将它放在 foreach 循环中是行不通的,因为它会在每一行上搜索和设置值:

if (strpos(strtolower(trim($value[1])), 'japanese') === true) {
    $country = 'japanese';
}
elseif (strpos(strtolower(trim($value[1])), 'german') === true) {
    $country = 'german';
}

这是我的代码:

function csv_content_parser($content) {
  foreach (explode("\n", $content) as $line) {
    yield str_getcsv($line, ",");
  }
}

$content = file_get_contents('cars.csv');

// Create one array from csv file's lines.
$data = array();
foreach (csv_content_parser($content) as $fields) {
  array_push($data, $fields);
}

$naujas_array = array();

foreach ($data as $key => $value) {

    if (!empty($value[0])) {
            $naujas_array[] =  array(
            'code'              => $value[0], 
            'name'              => $value[1], 
            'country'           => $country);
    }   
}
print_r($naujas_array);

【问题讨论】:

  • 你能提供 csv 内容本身吗?

标签: php arrays foreach


【解决方案1】:

以空的$country开头,如果$value[0]为空,则更改它:

$country = null;

foreach ($data as $key => $value) {

    if (!empty($value[0])) {
            $naujas_array[] =  array(
            'code'              => $value[0], 
            'name'              => $value[1], 
            'country'           => $country);
    } else {
        $country = $value[1];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2018-03-20
    相关资源
    最近更新 更多