Зацикливание многомерных массивов PHP и отображение всех соответствующих массивов - PullRequest
0 голосов
/ 01 апреля 2019

Я обнаружил почти схожую проблему в этой теме [текст ссылки] Цикл Многомерные массивы PHP

Мой массив немного другой, но почти похож:

> Array  
>      (    
>         [size] => int (995)
>         [data] => Array
>           (
>               [0] => Array
>                     (
>                       [service] => 8000
>                       [network] => xxx.xxx.xxx
>                     )
> 
>                [1] => Array
>                       (
>                           [service] => 9000
>                           [network] => xxx.xxx.xxx
>                       )
> 
>                [2] => Array
>                       (
>                            [service] => 9500
>                            [network] => xxx.xxx.xxx
>                       )
>              ) 
       )

Я хотел бы проверить все значения [service], чтобы увидеть, является ли число, введенное пользователем, действительным и существует, и отобразить соответствующую [network]

Вот моя наивная попытка:

$record = NULL;

// let's assume $x as this array here
foreach($record in $x['data']){
    if($record['service'] == $bus){
        break;
    }
}

if($record){
    // record found
    var_dump($record);
}else{
    echo "Not found";
}

Ответы [ 5 ]

1 голос
/ 01 апреля 2019

Просто для удовольствия, если предположить, что service уникален:

$services = array_column($x['data'], null, 'service');

if(isset($services[$bus]) {
    echo $services[$bus]['network'];
} else {
    echo "Not found";
}
  • Извлечь массив и проиндексировать его с помощью service
  • Теперь вы можете получить к нему доступ с помощью $services[$bus] отл.$services[8000]['network'].
0 голосов
/ 02 апреля 2019

Добавление на Джонатона Хайндля: (извините, я пока не могу ответить).

Может быть полезно сделать $ found массивом, если вы нашли один и тот же сервис с разными сетями.

$found=[];
// let's assume $x as this array here
foreach($x['data'] as $record ){
   if($record['service'] == $bus){
       //appends to $found
       $found[]=$record['service'];
   }
}
if(!empty($found){
   // record(s) found
   var_dump($record);
}else{
   echo "Not found";
}

0 голосов
/ 02 апреля 2019

Если я правильно понимаю ваш вопрос, он должен выглядеть примерно так:

// For the sake of the example, first I reconstructed your array:
$ar1 = array("service" => 8000, "network" => "111.111.111");
$ar2 = array("service" => 9000, "network" => "222.222.222");
$ar3 = array("service" => 9500, "network" => "333.333.333");
$x = array("size" => 995,
        "data" => array($ar1,$ar2,$ar3));

$record = NULL;
$bus = 9000;

for($n = 0; $n < count($x["data"]); $n++){
    $checkService = $x["data"][$n];
    if($checkService["service"] == $bus){
        $record = $checkService["network"];
    }
}

if ($record) {
    // If record found:
    echo "Lookup Results for ".$bus.": ".$record;
    // Since we are searching for 9000 in this example, this should output -> Lookup Results for 9000: 222.222.222
} else {
    echo "Record not found";
}

Этот код можно упростить еще больше, но я не уверен, что именно вам нужно.

Вы можете проверить конечный результат через в этом примере .

Надеюсь, это поможет.Ура!

0 голосов
/ 01 апреля 2019
$found_record = NULL;
// let's assume $x as this array here
foreach($record in $x['data']){
if($record['service'] == $bus){
     $found_record = $record['service'];
      break;
    }
  }
 if($found_record){
   // record found
   var_dump($record);
  }else{
    echo "Not found";
}
0 голосов
/ 01 апреля 2019

почти верно:

Синтаксис forEach выполняется наоборот: forEach(<array> as $iterator) о, вам нужно обработать присвоение переменной $ reslt (которую я переименовал в $ found по какой-то причине) немного по-другому

 $found=NULL;
    // let's assume $x as this array here
    foreach($x['data'] as $record ){
        if($record['service'] == $bus){
            $found=$record['service'];
        }
    }

    if($found != NULL){
        // record found
        var_dump($record);
    }else{
        echo "Not found";
    }
...