php - 如何处理 while 循环内的 foreach 中的空数组键?

标签 php mysql arrays foreach

我有以下从 msqli 查询生成的数组。

Array
(
    [0] => 21
    [1] => AAAAA
    [2] => BBBBB
    [3] => 1234567
    [4] => aaa
    [5] => bbb
    [6] => ccc
    [7] => ddd
    [8] => 2015-01-19 03:31:33
    [9] => 1
    [10] => 5
    [11] => 5, - not set -;9, - not set -;10, - not set -;11, - not set -;14, - not set -;19, 12;20, mm_cb_on;21, - not set -;27, Noe;28, Pena;62, mm_cb_off
)

Array
(
    [0] => 22
    [1] => AAAAA
    [2] => BBBBB
    [3] => 1234567
    [4] => aaa
    [5] => bbb
    [6] => ccc
    [7] => ddd
    [8] => 2015-01-19 03:31:33
    [9] => 1
    [10] => 6
    [11] => 5, - not set -;9, - not set -;10, - not set -;11, - not set -;14, - not set -;20, mm_cb_on;21, - not set -;
)

Array
(
    [0] => 23
    [1] => AAAAA
    [2] => BBBBB
    [3] => 1234567
    [4] => aaa
    [5] => bbb
    [6] => ccc
    [7] => ddd
    [8] => 2015-01-19 03:31:33
    [9] => 1
    [10] => 7
    [11] => 5, - not set -;11, - not set -;14, - not set -;19, 23;20, mm_cb_on;21, - not set -;27, Noe;28, Pena;62, mm_cb_off
)

我像这样循环访问这些数据:

while ($row = mysqli_fetch_array($data)) {
    echo "<td nowrap>" .$row{'first_name'}. "</td>
          <td nowrap>" .$row{'last_name'}. "</td>
          .......";
}

当我到达数组中的最后一个键时,我将循环遍历该数据,并像这样爆炸:

while ($row = mysqli_fetch_array($data)) {
    echo "<td nowrap>" .$row{'first_name'}. "</td>
          <td nowrap>" .$row{'last_name'}. "</td>
          .......";
    $custom_fields = $row[11];
    $fields = explode(";", $custom_fields);
    foreach ($fields as $keys) {
        $key = explode(',', $keys);

        var_dump($key);
    }
}

该 var 转储生成以下数组结构(对于前一个数组中的第一个键):

Array
(
    [0] => 5
    [1] =>  - not set -
)
Array
(
    [0] => 9
    [1] =>  - not set -
)
Array
(
    [0] => 10
    [1] =>  - not set -
)
Array
(
    [0] => 11
    [1] =>  - not set -
)
Array
(
    [0] => 14
    [1] =>  - not set -
)
Array
(
    [0] => 19
    [1] =>  12
)
Array
(
    [0] => 20
    [1] =>  mm_cb_on
)
Array
(
    [0] => 21
    [1] =>  - not set -
)
Array
(
    [0] => 27
    [1] =>  Noe
)
Array
(
    [0] => 28
    [1] =>  Pena
)
Array
(
    [0] => 62
    [1] =>  mm_cb_off
)

我正在尝试创建像这样的条件:

if (isset($key[0]) && $key[0] == 19) { // this produce none for every row
    $prov_id = $key[1];
} else {
    $prov_id = 'None';
}

if ($key[0] == 27) {
    $fm2_fname = $key[1];
} else {
    $fm2_fname  = '';
}

if ($key[0] == 28) {
    $fm2_lname = $key[1];
} else {
    $fm2_lname  = '';
}

我遇到的问题是在循环中某些项目没有 $key[0] == "19" ...我将如何在 foreach 循环中处理这个问题?非常感谢任何帮助。

最佳答案

if (isset($key[0]) && $key[0] == 19) { // this produce none for every row
    $prov_id = $key[1];
} else {
    $prov_id = 'None';
}

if ($key[0] == 27) {
    $fm2_fname = $key[1];
} else {
    $fm2_fname  = '';
}

if ($key[0] == 28) {
    $fm2_lname = $key[1];
} else {
    $fm2_lname  = '';
}

因为每个语句都有一个 else,该值将在循环时设置,因此在您的情况下,它将变量设置为 $ 后将其设置为 'None'键[1]

而是去掉 } else { 并将变量更改为以下内容,以便每一行都有自己的值:

$row['prov_id']
$row['fm2_fname']
$row['fm2_lname']

所以现在最终的代码将是这样的:

if ($key[0] == 19)
    $row['prov_id'] = $key[1];

if ($key[0] == 27) 
    $row['fm2_fname'] = $key[1];

if ($key[0] == 28) 
    $row['fm2_lname'] = $key[1];

在 foreach 循环之外对每个变量执行此操作

if (!isset($row['prov_id'])) $row['prov_id'] = '';

关于php - 如何处理 while 循环内的 foreach 中的空数组键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928711/

相关文章:

arrays - 让 Swift 中的非可变数组

mysql - 调用存储函数的派生属性抛出 StreamCorruptedException

mysql - 如何将向量插入到 mysql 表的列中?

Java : Difficulties trying to store data from MySQL DB into a two-dimensional array of Strings

python - 是否可以将以一种方式堆叠的 Python 数组 reshape 为另一种堆叠类型?

arrays - 使用 jsonb_set() 更新特定的 jsonb 数组值

php - MySQL 服务器消失了 - 在 mysql php 循环之后

php - Laravel:尝试获取 PDF 时出现 DOMPDF 错误

PHP获取数组值和数组键

php - 如何获取具有受影响行数的列的总和