-3

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

长:

我有一个 foreach 循环,可以提取文本文件并将它们转换为单个/单个数组(重置每个文件之间的数组)...

例子:

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


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

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

我想提取“名称”和“数字”的值,但是我事先不知道键的值/格式.. - 示例:pinkblue597

如果我这样做print_r,我会看到我想要的数组......

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

但如果我这样做,$name=$found[0];我不会得到“$name”的结果......

或者

如果我这样做,$name=$found[0]["name"]; 我不会得到“$name”的结果......

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

PS 这个数组中只有一个(未知)键和一个子数组。子数组始终相同。

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

4

3 回答 3

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, 
           )
)
于 2016-08-20T12:10:06.037 回答
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'],它可以为您提供您正在寻找的那种直接的取消引用。

于 2016-08-20T12:18:05.790 回答
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
于 2016-08-20T13:22:18.393 回答