有没有办法在不知道主键的情况下从SUBARRAY获取命名键/值?

时间:2016-08-20 12:04:19

标签: php sub-array

简短:有没有办法在不知道主键的情况下从SUBARRAY获取命名键/值?

长:

我有一个foreach循环,提取文本文件&将它们变成单个/单个数组(在每个文件之间重置数组)......

示例:

Array
(
    [Blah Blah] => Array
        (
            [number] => 10
            [name] => nameBlah
            [image] => 
        )
)


Array
(
    [pinkblue597] => Array
        (
            [number] => 18
            [name] => nameBlah68
            [image] => 
        )
)

(变成数组的第一部分被进程的多个部分使用,所以我不想添加不必要的代码)

我想提取“name”和“number”的值,但是我不知道该键的值/格式... - 示例:pinkblue597

如果我print_r,我确实看到了我想要的数组......

print_r($found,true)."\n";

但如果我这样做,$name=$found[0];我的“$ name”没有结果......

如果我这样做,$name=$found[0]["name"];我的“$ name”没有结果......

我可以通过foreach循环来做到这一点,但它似乎效率低下......

PS此阵列中只有一个(未知)键,&一个子阵列。子数组总是一样的。

编辑:让代码更容易看到(忘记这样做)

3 个答案:

答案 0 :(得分:1)

如果阵列形成将始终相同......

然后(嵌套的)foreach循环就足够了,请看下面的例子,

<?php

$a = [
    'somethingUnknown13582563' => [
        'name' => 'name',
        'number' => 15
    ],

    'somethingUnknown2' => [
        'name' => 'another name',
        'number' => 24
    ]
];

foreach ($a as $key => $subArray) {
    foreach ($subArray as $subKey => $value) {
        echo $subArray[$subKey] . '<br>';
    }
}

?>

<强>输出

name
15
another name
24

或者...

您可以使用array_values

<?php

$a = [
    'somethingUnknown13582563' => [
        'name' => 'first name',
        'number' => 15
    ],

    'somethingUnknown2' => [
        'name' => 'name',
        'number' => 24
    ]
];

$a = array_values($a);

echo $a[0]['name'];

?>

将第一个关联数组转换为数字索引,并希望如此,

array(
      0 => array(
             'name' => 'first name', 
             'number' => 15, 
           ), 
      1 => array(
             'name' => 'name', 
             'number' => 24, 
           )
)

答案 1 :(得分:0)

我不知道你为什么要首先创建一个嵌套数组,如果你只打算立即丢弃它,但由于数组似乎只有一个元素,你只关心那个元素,你可以简单地使用array_pop

$a = [
    'somethingUnknown13582563' => [
        'name' => 'first name',
        'number' => 15
    ],
];

$data = array_pop($a);
echo $data['name']; // gives you 'first name'

请注意,array_pop具有破坏性。因此,如果您不想要这种行为,可以使用类似end的内容。

$data = end($a); // same effect as array_pop but non-destructive
echo $data['name']; // also gives you 'first name'

话虽如此,foreach构造不一定效率低下。我相信你真正关心的是找到一种更简单的方法来取消引用嵌套数组。在您的情况下,最简单的方法是使用类似end($a)['name']的东西,它可以为您提供您正在寻找的那种直接解除引用。

答案 2 :(得分:0)

您可以使用array_map()来实现此目标......

array_map - 将回调应用于给定数组的元素。这将通过回调函数循环所有数组元素,您可以打印子数组中的每个元素..

<?php 
$myArry = array(
              'Blah Blah' => array(
                     'number' => 10, 
                     'name' => 'Blah Blah 1', 
                   ), 
              'pinkblue597' => array(
                     'number' => 15, 
                     'name' => 'Blah Blah 2', 
                   )
        );

array_map(function($arr){ 
    echo 'Name : '.$arr['name'].'<br>'; 
    echo 'Number : '.$arr['number'].'<br>';     
},$myArry);

?>

这会给你:

Name : Blah Blah 1
Number : 10
Name : Blah Blah 2
Number : 15