我如何获得指定的数组值

Posted

技术标签:

【中文标题】我如何获得指定的数组值【英文标题】:How i get the specified array values 【发布时间】:2017-12-08 13:36:04 【问题描述】:

您好,我的脚本中有这个数组。这是我的数组

Array
(
    [0] => Array
        (
            [0] => BACK
            [1] => PACK
            [2] => BBP160800103
            [3] => 
            [4] => G086-1
            [5] => 8#.JPG
        )
     [2] => Array
        (
            [0] => BACKPACK
            [1] => BBP160500010
            [2] => G114-3#1.JPG
        )
 [3] => Array
        (
            [0] => WSL160800024-WSL160800025
            [1] => L83-5.JPG
        )
 [4] => Array
        (
            [0] => IA041017
            [1] => L83-5.JPG
        )
)

我从这个脚本中得到了数组。我正在使用 codeigniter 3

public function generatenewname()
    $this->load->helper('directory');
    $map = directory_map( './assets/file_upload/md/temp/',FALSE, TRUE);
    for($x=0;$x<count($map);$x++)
        $newest[$x] = explode(" ",$map[$x]);
    
    echo "<pre>";print_r($newest);

所以从上面的数组中我想得到这个值BBP160800103,BBP160500010,WSL160800024,WSL160800025IA041017 我怎样才能实现它?

--更新--

我从我的脚本中做了一些更新(我正在尝试)

public function generatenewname()
        $this->load->helper('directory');
        $map = directory_map( './assets/file_upload/md/temp/',FALSE, TRUE);
        for($x=0;$x<count($map);$x++)
            $newest[$x] = explode(" ",$map[$x]);
                for($y=0;$y<count($newest[$x]);$y++)
                    if(strlen($newest[$x][$y]) >= 7)
                        $file[] =$newest[$x][$y];

                    
                
        
            for($x=0;$x<count($file);$x++)
                echo $x.' '. $file[$x].'<br>';
            
    

对于我上面的脚本,我在我的列表中得到了这个

[n] BBP160800103
[n] BBP160500010
[n] WSL160800024-WSL160800025

我想实现它

    [n] BBP160800103
    [n] BBP160500010
    [n] WSL160800024
    [n] WSL160800025

【问题讨论】:

【参考方案1】:

您可以根据起始键匹配模式。

$array = [
    ['BACK', 'PACK', 'BBP160800103', '', 'G086-1', '8#.JPG'],
    ['BACKPACK', 'BBP160500010', 'G114-3#1.JPG'],
    ['WSL160800024-WSL160800025', 'L83-5.JPG'],
    ['IA041017', 'L83-5.JPG']
];

$patterns = ['(BBP\w+)', '(WSL\w+)', '(IA\w+)'];

$codes = [];
$matcher = '/' . implode($patterns, '|') . '/';

foreach ($array as $arr) 
    array_map(function ($value) use ($matcher, &$codes) 
        preg_match_all($matcher, $value, $matches);

        foreach($matches as $match) 
            $codes = array_merge(array_filter($match), $codes);
        
    , $arr);


print_r(array_unique($codes));

// output
Array
(
    [0] => IA041017
    [2] => WSL160800024
    [3] => WSL160800025
    [6] => BBP160500010
    [8] => BBP160800103
)

【讨论】:

当我添加另一个 $patterns 时,它运行缓慢。抱歉英语不好【参考方案2】:

将您的最终数组传递给此函数以实现您的结果。

arraymakking($file);//your array

function arraymakking($arr)
    foreach($arr as $key=>$val)
        if(strpos($val,'-') !== false)
            $res=explode('-',$val);
            unset($arr[$key]);
        
    
    $result=array_merge($arr,$res);
    return $result;

【讨论】:

你检查了吗? @YVS1102 我正在分解$val 并将其存储到$res 变量中。@YVS1102 是的,我的错。谢谢【参考方案3】:

试试这个:

echo $array[0][3]; //BBP160800103
echo $array[2][1]; //BBP160500010

等等。请参阅编号索引。你最好用命名索引创建你的数组。像这样:

$array = array("Array1"=>array("key1"=>"val1","key2"=>"val2"),"Array2"=>(array("2ndKey1"=>"val1", "2ndKey2"=>"val2));

【讨论】:

以上是关于我如何获得指定的数组值的主要内容,如果未能解决你的问题,请参考以下文章

PHP数组中,如何查询所有等于指定值得元素下标?

如何从一个数组中查找指定的元素,并返回这个元素在数组中的位置

如何使用 Mongoose 查询过滤到数组类型字段中具有指定值的文档?

如何截断大于指定值的值的numpy数组?

如何指定数组gorm golang的默认值?

C#如何读取XML中指定的节点值?