PHP - цикл в 3-х мерном массиве дает проводной вывод - PullRequest
0 голосов
/ 10 июля 2019

Во время цикла 3-й цикл не дает правильного выхода.3-й цикл должен получить все совпадающие имена из 2-го цикла массива.Но он получает только первый элемент массива из второго массива и игнорирует все остальные элементы массива.

Что может быть возможным объяснением здесь?Есть ли проблема в коде?

<?php
$t = json_decode(file_get_contents('https://gist.githubusercontent.com/mshafrir/2646763/raw/8b0dbb93521f5d6889502305335104218454c2bf/states_titlecase.json'), true);

$reg_state_short = array();

$reg_state = array(
    array('Connecticut',' Maine',' Massachusetts',' New Hampshire',' Rhode Island',' Vermont'), 
    array('New Jersey',' New York',' Puerto Rico',' US Virgin Islands'), 
    array('Delaware',' District of Columbia',' Maryland',' Pennsylvania',' Virginia',' West Virginia'), 
    array('Alabama',' Florida',' Georgia',' Kentucky',' Mississippi',' North Carolina',' South Carolina',' Tennessee'), 
    array('Illinois',' Indiana',' Michigan',' Minnesota',' Ohio',' Wisconsin'), 
    array('Arkansas',' Louisiana',' New Mexico',' Oklahoma',' Texas'), 
    array('Iowa',' Kansas',' Missouri',' Nebraska'), 
    array('Colorado',' Montana',' North Dakota',' South Dakota',' Utah',' Wyoming'), 
    array('Arizona',' California',' Hawaii',' Nevada',' American Samoa',' Guam',' Northern Mariana Islands'), 
    array('Alaska',' Idaho',' Oregon',' Washington')
);

foreach ($reg_state as $reg_state2) {
    foreach ($reg_state2 as $state) {
        foreach ($t as $t2) {         
            if ($t2['name'] === $state ) {
                $reg_state_short[] = $t2['abbreviation'];
                break;
            }
        }
    }
}

print_r($reg_state_short);

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

В некоторых штатах у вас есть дополнительный пробел в левой части $reg_state

Например:

' Maine'

Должно быть:

'Maine'

Вот полный код:

$t = json_decode(file_get_contents('https://gist.githubusercontent.com/mshafrir/2646763/raw/8b0dbb93521f5d6889502305335104218454c2bf/states_titlecase.json'), true);

$reg_state_short = array();

$reg_state = array(
    array('Connecticut','Maine','Massachusetts','New Hampshire','Rhode Island','Vermont'), 
    array('New Jersey','New York','Puerto Rico','US Virgin Islands'), 
    array('Delaware','District of Columbia','Maryland','Pennsylvania','Virginia','West Virginia'), 
    array('Alabama','Florida','Georgia','Kentucky','Mississippi','North Carolina','South Carolina','Tennessee'), 
    array('Illinois','Indiana','Michigan','Minnesota','Ohio','Wisconsin'), 
    array('Arkansas','Louisiana','New Mexico','Oklahoma','Texas'), 
    array('Iowa','Kansas','Missouri','Nebraska'), 
    array('Colorado','Montana','North Dakota','South Dakota','Utah','Wyoming'), 
    array('Arizona','California','Hawaii','Nevada','American Samoa','Guam','Northern Mariana Islands'), 
    array('Alaska','Idaho','Oregon','Washington')
);

foreach ($reg_state as $reg_state2) {
    foreach ($reg_state2 as $state) {
        foreach ($t as $t2) {         
            if ($t2['name'] === $state ) {
                $reg_state_short[] = $t2['abbreviation'];
                break;
            }
        }
    }
}

print_r($reg_state_short);
0 голосов
/ 10 июля 2019

Просто обрезать начальные и конечные пробелы

у вас есть первые пробелы в $reg_state, например ' Maine',' Massachusetts'

foreach ($reg_state as $reg_state2) {
    foreach ($reg_state2 as $state) {
        foreach ($t as $t2) {         
            if (trim($t2['name']) === trim($state) ) {
                $reg_state_short[] = $t2['abbreviation'];
                break;
            }
        }
    }
}

print_r($reg_state_short);

Что я сделал, так это обрезал начальные и конечные пробелы, используя trim в if выражении trim($t2['name']) === trim($state)

0 голосов
/ 10 июля 2019

Я сравнил все значения массива, используя следующий код.Я надеюсь, что это может помочь вам:

$t = json_decode(file_get_contents('https://gist.githubusercontent.com/mshafrir/2646763/raw/8b0dbb93521f5d6889502305335104218454c2bf/states_titlecase.json'), true);
    $t_array = array();
    foreach($t as $k => $row){
        array_push($t_array, $row['name']); 
    }

    $reg_state = array(
        array('Connecticut',' Maine',' Massachusetts',' New Hampshire',' Rhode Island',' Vermont'), 
        array('New Jersey',' New York',' Puerto Rico',' US Virgin Islands'), 
        array('Delaware',' District of Columbia',' Maryland',' Pennsylvania',' Virginia',' West Virginia'), 
        array('Alabama',' Florida',' Georgia',' Kentucky',' Mississippi',' North Carolina',' South Carolina',' Tennessee'), 
        array('Illinois',' Indiana',' Michigan',' Minnesota',' Ohio',' Wisconsin'), 
        array('Arkansas',' Louisiana',' New Mexico',' Oklahoma',' Texas'), 
        array('Iowa',' Kansas',' Missouri',' Nebraska'), 
        array('Colorado',' Montana',' North Dakota',' South Dakota',' Utah',' Wyoming'), 
        array('Arizona',' California',' Hawaii',' Nevada',' American Samoa',' Guam',' Northern Mariana Islands'), 
        array('Alaska',' Idaho',' Oregon',' Washington')
    );  

    $reg_state_short = array();
    foreach($reg_state as $k => $row){
        foreach($row as $k2 => $row2){
            if(in_array($row2, $t_array)){
                array_push($reg_state_short, $row2);
            }
        }
    }

    print_r($reg_state_short);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...