Есть ли способ получить именованный ключ / значение из SUBARRAY, не зная основного ключа?

php sub-array

91 просмотра

3 ответа

Коротко: есть ли способ получить именованный ключ / значение из 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 в этом массиве будет только ОДИН (неизвестный) ключ и подмассив. Подмассив всегда один и тот же.

Отредактировано: облегчает просмотр кода (забыл это сделать)

Автор: G Stewpot Источник Размещён: 08.11.2019 11:16

Ответы (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, 
           )
)
Автор: Script47 Размещён: 20.08.2016 12:10

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']что дает вам прямую разыменование, которое вы ищете.

Автор: Sherif Размещён: 20.08.2016 12:18

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
Автор: Manjeet Barnala Размещён: 20.08.2016 01:22
Вопросы из категории :
32x32