【问题标题】:PHP assoiative Array with almost Similar Keys具有几乎相似键的 PHP 关联数组
【发布时间】:2016-07-06 07:21:16
【问题描述】:

我有一个关联数组

array(
    'item_name1' => 'PCC',
    'item_name2' => 'ext',
    'item_number1' => '060716113223-13555',
    'item_number2' => '49101220160607-25222)',
)

我想要做的是捕获所有键名相似的数组键

例如 我想回显 item_name(它应该同时获得 item_name1 和 item_name2),但我需要在循环中(foreach/for),以便我可以在循环内将每组值的详细信息发送到我的数据库

感谢您的帮助

【问题讨论】:

  • 我的数组有 item_name1 和 item_name2 我想在循环中回显它而不使用 arrayname['item_name1'];
  • 您必须提供更多详细信息,例如您实际希望通过预期结果实现的目标以及您为此尝试的目标?

标签: php arrays codeigniter foreach


【解决方案1】:

使用函数array_keys

$allKeys = array_keys($yourArray);
$amountKeys = count($allKeys);

除非您不提供更多代码,否则这将为您提供$yourArray 的所有密钥 Reference - array_keys

要获得所有相似的键,你可以使用这个函数similar-text()

由于我不知道密钥有多“相似”,我建议您测试不同的值并找到符合您期望的学位。

【讨论】:

    【解决方案2】:

    您的数据模型似乎使用数字后缀作为数组的替代品,所以我假设 键名有相似之处 是一个高估的问题陈述,而您只是想解决这个问题。

    显而易见的工具是正则表达式:

    $original_data = array(
        'item_name1' => 'PCC',
        'item_name2' => 'ext',
        'item_number1' => '060716113223-13555',
        'item_number2' => '49101220160607-25222)',
    );
    
    $redacted_data = array();
    foreach ($original_data as $key => $row) {
        if (preg_match('/^(.+)(\d+)$/u', $key, $matches)) {
            $redacted_data[$matches[1]][$matches[2]] = $row;
        } else {
            $redacted_data[$key][] = $row;
        }
    }
    var_dump($redacted_data);
    

    应该很容易根据您的确切需求进行调整。

    我无法弄清楚 我在循环中需要它(foreach/for) 的要求是什么意思,但您可以像任何其他数组一样循环生成的数组:

    foreach ($redacted_data as $k => $v) {
        foreach ($v as $kk => $vv) {
            printf("(%s,%s) = %s\n", $k, $kk, $vv);
        }
    }
    

    【讨论】:

    • 数组像这样组合起来,看起来很完美([item_name] => Array ([1] => Potrait Color Correction [2] => Extraction)
    • 这是您共享的不同数据。不管怎样,请确保您真正理解代码并且不要忘记添加您自己的安全检查(例如,您可能不想覆盖现有密钥)。
    • 数组像这样组合起来看起来很完美codearray( [item_name] => Array ( [1] => PCC [2] => Ext )[item_number] => Array ( [ 1] => 060716113223-13555 [2] => 49101220160607-25222 )) 现在看来现在组织起来是为了打印它们 foreach ($redacted_data['item_name'] as $abc => $val) { foreach ($ redacted_data['item_number'] as $xyz => $valu) { echo $val.'
      ';echo $valu; } }code
    • 这正是我要防止值复制 Potrait 颜色校正 060716113223-13555Potrait 颜色校正 49101220160607-25222Extraction 060716113223-13555Extraction 49101220160607-25222 之类的方法
    • 我用它来回显值而不重复,但如果有更好的方法,你可以建议`$arr=array(); foreach ($redacted_data['item_name'] as $abc => $val) { foreach ($redacted_data['item_number'] as $xyz => $valu) { if(!in_array($val, $arr)){ echo $val." ";echo $value; } $arr[]=$val; $arr[]=$值; } } `
    【解决方案3】:
    <?php
    
    $items=[];
    $itemsNumbers=[];
    foreach($itemarr as $key=> $val)
    {
        $itempos = strpos("item_name", $key);
        if ($pos !== false) 
            $items[]=$val;
        $numberpos = strpos("item_number", $key);
        if ($numberpos !== false) 
            $itemsNumbers[]=$val;
    
    }
    
    ?>
    Note: here $itemarr is your input array
    

    $items 你会得到项目名称列表和 $itemsNumbers 你会得到 itemsNumbers 列表

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 2016-01-19
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      相关资源
      最近更新 更多