首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多维数组的PHP前端没有打印所有值

使用多维数组的PHP前端没有打印所有值
EN

Stack Overflow用户
提问于 2017-07-11 19:29:39
回答 3查看 1K关注 0票数 0

我有一个非常简单的多维数组和一些PHP代码。代码应该打印p_id值,但它不会这样做。我真的需要多加一个预测,还是有其他的方法?

下面是数组:

代码语言:javascript
复制
Array (
  [2764] => Array (
    [status] => 0

    [0] => Array (
      [p_id] => 2895
    )

    [1] => Array (
      [p_id] => 1468
    )
  )

  [5974] => Array (
    [status] => 0

    [0] => Array (
      [p_id] => 145
    )

    [1] => Array (
      [p_id] => 756
    )
  )
)

以下是我的PHP代码:

代码语言:javascript
复制
foreach($arr as $innerArray)
  foreach($innerArray as $key => $value)
    echo $key . "=>" . $value . "<br>";

它打印:

代码语言:javascript
复制
status=>0
0=>Array
1=>Array
status=>0
0=>Array
1=>Array
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-12 15:16:02

这个对array_walk_recursive()的简单调用产生了问题中请求的输出:

代码语言:javascript
复制
array_walk_recursive(
    $arr, 
    function ($value, $key) {
        echo $key . "=>" . $value . "<br>";
    }
);

但是,由于输出将status的值与p_id的值混合在一起,这就没有什么意义了。

我将使用原始代码进行更结构化的显示,对变量的名称有更多的意义:

代码语言:javascript
复制
foreach ($arr as $catId => $catInfo) {
    // Category ID and details; use other names if I'm wrong
    printf("Category: %d (status: %s)\n", $catId, $catInfo['status'] ? 'active' : 'inactive');
    foreach ($catInfo as $key => $value) {
        if ($key == 'status') {
            // Ignore the status; it was already displayed
            continue;
        }

        foreach ($value as $prodInfo) {
            printf("    Product ID: %d\n", $prodInfo['p_id']);
        }
    }
}

输入数组的结构告诉我,首先应该修复生成它的代码。它应该将所有产品(现在由数字键索引的值)分组到一个数组中。它应该是这样的:

代码语言:javascript
复制
$input = array(
    '2764' => array(
        'status' => 0,
        'products' => array(
            2895 => array(
                'p_id' => 2895,
                'name' => 'product #1',
                // more product details here, if needd
            ),
            1468 => array(
                'p_id' => 1468,
                'name' => 'product #2',
            ),
            // more products here
        ),
    // more categories here
),

然后打印它的代码将如下所示:

代码语言:javascript
复制
foreach ($arr as $catId => $catInfo) {
    // Category ID and details; use other names if I'm wrong
    printf("Category: %d (status: %s)\n", $catId, $catInfo['status'] ? 'active' : 'inactive');
    foreach ($catInfo['products'] as $prodInfo) {
        printf("    %s (ID: %d)\n", $prodInfo['name'], $prodInfo['p_id']);
        // etc.
    }
}
票数 -1
EN

Stack Overflow用户

发布于 2017-07-11 19:50:49

代码语言:javascript
复制
foreach($arr as $a => $a_value)
{
    echo $a . '<br>'; 
    foreach($a_value as $av_arr => $av)
    {
        if(!is_array($av)) 
        {
            echo $av_arr . '=>' . $av . '<br>'; 
        }
        else
        {
            foreach($av as $inner_av => $inner_av_val)
            {
                echo $inner_av . '=>' . $inner_av_val . '<br>'; 
            }
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-07-11 20:26:06

使用递归函数:

代码语言:javascript
复制
function printIds($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val) && array_key_exists("p_id", $val)) {
            echo $val["p_id"]."\n";
        } elseif(is_array($val)) {
            printIds($val);
        }
    }
}

工作实例:

代码语言:javascript
复制
$arr = [
    2764 => [
        'status' => 0,
        ['p_id' => 100],
    ],
    4544 => [
        'status' => 0,
        ['p_id' => 100],
    ],
    ['p_id' => 100],
];

function printIds($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val) && array_key_exists("p_id", $val)) {
            echo $val["p_id"]"\n";
        } elseif(is_array($val)) {
            printIds($val);
        }
    }
}

printIds($arr);

如果函数包含一个名为"p_id“的数组,则函数会循环给定数组的所有条目,并将其输出。如果它确实找到了一个嵌套数组,那么它也会循环所有子数组。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45043042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档