如果我在PHP中有一个键,则循环到数组中

时间:2018-01-13 02:06:31

标签: php arrays

如何循环进入此数组的plans数据:

$currencies = array(
    array(
        'currency' => 'mxn', 
        'sign'     => '$',
        'plans'    => array(
            'tiny'   => 429,
            'small'  => 1319,
            'medium' => 3399,
            'big'    => 6669
        )
    ),
    array(
        'currency' => 'usd', 
        'sign'     => '$',
        'plans'    => array(
            'tiny'   => 29,
            'small'  => 319,
            'medium' => 399,
            'big'    => 669
        )
    )
);

如果我只有currency

$currency = 'mxn';

我试过了:

foreach($currencies as $currency => $info) {
    if($info['currency'] = 'mxn') {
        ....
    }
}

感谢。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,当“货币”等于“mxn”时,你想循环数组“计划”。这是:

<?php
foreach($currencies as $key => $data) {
  if($data['currency'] == 'mxn')
  {
    echo 'List of plans: <br />';
    foreach($data['plans'] as $item){
        echo $item.'<br />';
    }
  }
}
?>

首先,代码检查哪个数组是mxn货币并在“plans”数组上执行循环。

只是为了补充帖子的简化替代

<?php
$key = array_search('mxn', array_column($currencies, 'currency'));
foreach($currencies[$key]['plans'] as $item){
    echo $item.'<br />';
}
?>

答案 1 :(得分:0)

这个问题是展示更好方法的绝佳机会。

代码:(演示:https://3v4l.org/dU09B

$currencies = [
    'mxn' => [
        'sign'  => '$',
        'plans' => [
            'tiny'   =>  429,
            'small'  => 1319,
            'medium' => 3399,
            'big'    => 6669
        ]
    ],
    'usd' => [
        'sign'  => '$',
        'plans' => [
            'tiny'   =>  29,
            'small'  => 319,
            'medium' => 399,
            'big'    => 669
        ]
    ]
];

$currency='mxn';

if(!isset($currencies[$currency])){
    echo "$currency was not found in the currencies array.";
}else{
    echo "In $currency:\n";
    foreach($currencies[$currency]['plans'] as $size=>$price){
        echo "\t$size costs {$currencies[$currency]['sign']}$price\n";
    }
}

输出:

In mxn:
    tiny costs $429
    small costs $1319
    medium costs $3399
    big costs $6669

说明:

由于货币名称在逻辑上是唯一的,因此您可以通过将货币名称声明为子数组键来减小查找数组的总大小。

如果您要将相同的数据存储在数据库中,您可以将货币名称指定为主键。

作为提高效率和直接编码的问题,新的阵列结构将允许您使用isset()快速确定您所需的货币是否存在于多维数组中。

你的问题标题问:如果我在PHP中有一个密钥,则循环到一个数组我认为这可能意味着 needle 可能不在草堆。也许这不是你的意思,但这种考虑对于构建你的代码很重要。

在尝试使用密钥之前,验证密钥是否存在于多维数组中是必不可少的(避免使用通知ftom php)。

如果您无法或无法修改数据结构,请确保使用两个最佳实践:

    找到货币后,
  1. break您的搜索foreach循环;或致电array_search()为您做这件事。在您收到所需数据后迭代阵列中的其余项目是浪费/低效的。

  2. 写一个处理未找到货币可能性的条件。因为尝试访问:$currencies[false]并不适合您。