if input code is equal to code, set icon - php
So, I am making a weather app using php and some weather apis. API that I use is giving me code that says what is the weather like. So, for example, if code is 200, that means that current weather is 'Thunderstorm with light rain'. What I want to do is show an icon for every code.
icon-lightning-4 { 200, 201, 202, 210, 211, 212, 221, 230, 231, 231 }
icon-rainy-2 { 300, 301, 302, 310, 311, 312, 313, 314, 321, 520, 521, 522, 531 }
icon-rainy { 500, 501, 502, 503, 504 }
icon-snowy-3 { 511, 600, 601, 602, 611, 612, 615, 616, 620, 621, 622 }
icon-air { 701, 711, 721, 731, 741, 751, 761, 761, 771, 781 }
icon-sun { 800 }
icon-moon { 800 }
icon-cloudy { 801 }
icon-cloud-3 { 801 }
icon-cloud-4 { 802 }
icon-cloudy-2 { 803, 804 }
Above you can see Icon name and codes inside curly brackets. How to achieve this with PHP to show icon instead of code. I am not a PHP developer, but I am learning and that's why I am asking this. Help very appreciated. These icon names on the left are actually span classes that show icons.
I would just put the codes into an array and loop through them using the foreach construct:
<?php
$iconMap = array(
'icon-lightning-4' => array(200, 201, 202, 210, 211, 212, 221, 230, 231, 231),
'icon-rainy-2' => array(300, 301, 302, 310, 311, 312, 313, 314, 321, 520, 521, 522, 531),
'icon-rainy' => array(500, 501, 502, 503, 504),
'icon-snowy-3' => array(511, 600, 601, 602, 611, 612, 615, 616, 620, 621, 622),
'icon-air' => array(701, 711, 721, 731, 741, 751, 761, 761, 771, 781),
'icon-sun' => array(800),
'icon-moon' => array(800),
'icon-cloudy' => array(801),
'icon-cloud-3' => array(801),
'icon-cloud-4' => array(802),
'icon-cloudy-2' => array(803, 804)
);
$icon = '';
foreach ($iconMap as $iconString => $codes) {
if (in_array($result, $codes, true)) {
$icon = $iconString;
break; // stop looping, for efficiency
}
}
I've called the result from the API $result here.
What this code is doing:
Creating an associative array with the codes corresponding to each icon name
Looping through this array
For each icon name, it is checking whether $result is in the array of codes using in_array
If it is, it will set $icon to be the icon name and stop looping.
If the code is not found, $icon will simply be an empty string.
You can use the string $icon to output your image, for instance:
if (!empty($icon)) {
echo "<img src='{$icon}.png' alt='...'>";
}
Well its hard to give you the right code since there isn't that much there,... But this is what I would do:
PHP:
// for the lightning icon...
if ($code == 200||201||202||210||211||212||221||230||231||231){
$image_URL = "icon_lightning.png";
}
HTML:
<img src='<?php echo $image_URL ?>' width='50px' height='50px'></img>
Related
How to get array key with less than values
I have 2 arrays: $arr_1=array(200, 300, 200, 200); $arr_2=array( 1 => array(70, 90, 70, 20), 2 => array(115, 150, 115, 35), 3 => array(205, 250, 195, 55), 4 => array(325, 420, 325, 95), 5 => array(545, 700, 545, 155) ); Now I need some way to get array keys for arrays in $arr_1 where all their values are less than all values from $arr_2. In the above example it must return key 1 AND key 2 from $arr_2 without using a foreach loop.
You can use array_filter to filter the elements (it preserves keys) and then pass the result to array_keys to receive an array of keys. Also, your condition can be spelled this way: "return subarrays from $arr_2 where highest value is smaller than smallest value of $arr_1." $arr_1=array(200, 300, 200, 200); $arr_2=array( 1 => array(70, 90, 70, 20), 2 => array(115, 150, 115, 35), 3 => array(205, 250, 195, 55), 4 => array(325, 420, 325, 95), 5 => array(545, 700, 545, 155) ); $filtered = array_filter($arr_2, function($value) use ($arr_1) { return max($value) < min($arr_1); }); $keys = array_keys($filtered); var_dump($keys);
If you are only interested in comparing the subarrays against the lowest value in $arr_1, then best practices dictates that you declare that value before entering the array_filter(). This will spare the function having to call min() on each iteration. (Demo) $arr_1=[200,300,200,200]; $arr_2=[ 1=>[70,90,70,20], 2=>[115,150,115,35], 3=>[205,250,195,55], 4=>[325,420,325,95], 5=>[545,700,545,155] ]; $limit=min($arr_1); // cache this value, so that min() isn't called on each iteration in array_filter() $qualifying_keys=array_keys(array_filter($arr_2,function($a)use($limit){return max($a)<$limit;})); var_export($qualifying_keys); /* array( 0=>1, 1=>2, ) */
How to diff file's apostrophe text in PHP
I want to diff 2 files and ignore checking lines that doesn't have apostrophe ("text") in PHP For example: File 1: START LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT File 2: /* * Translated by Saibamen * / START LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT I want to check if there's any difference between Tool Version: and Wersja narzędzia: strings. Note: Files doesn't have this same schemas line by line - I want to start diff lines from line that have START in file.
You should first get content of each file and then use preg_match function with proper pattern to find version line and version string. $fileContent1 = <<<TXT dummy dummy LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT dummy TXT; $fileContent2 = <<<TXT dummy LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT dummy dummy TXT; function diff_versions($leftContent, $rightContent) { $diff = true; $leftVersion = null; $rightVersion = null; $pattern = '/LTEXT "(Tool Version|Wersja narzędzia):", (.*)\R?/'; if (preg_match($pattern, $leftContent, $matches) !== 1) { throw new Exception('Left content has no version line.'); } $leftVersion = $matches[2]; if (preg_match($pattern, $rightContent, $matches) !== 1) { throw new Exception('Right content has no version line.'); } $rightVersion = $matches[2]; return array( 'diff' => $leftVersion === $rightVersion, 'leftVersion' => $leftVersion, 'rightVersion' => $rightVersion, ); } var_dump(diff_versions($fileContent1, $fileContent2)); Output: array (size=3) 'diff' => boolean true 'leftVersion' => string 'IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT' (length=89) 'rightVersion' => string 'IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT' (length=89) And then you should diff versions as you like.
Maybe this will give a point to start with: $str1 = 'LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT'; $str2 = 'LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT'; $shortStr1 = substr($str1, 23); $shortStr2 = substr($str2, 28); echo "\n"; echo substr_compare($shortStr1, $shortStr2, 0, strlen($shortStr1)); echo "\n"; echo substr_compare($shortStr2, $shortStr1, 0, strlen($shortStr2)); Two compares if the Strings are not the same size Will return 0 if same Will return 1 if not same For a better test you have to test via preg_match() and pre_match_all() I think this - or at least the idea - will lead you to the answer. Next time provide more Information and what you already have tried and many people here will even provide full solutions! But for that you have to show what you already got and already tried. No one wants to do the work you are paid for, but many here are willing to help you, if you have any problem and tried hard enough!
magento layered navigation links doesn't work on cms pages
I'm trying to get the magento layered navigation to work on cms pages, but the links go to a error page, everything works fine on the category pages, but not on cms pages and result pages. Please take a look at this to understand my question test site and if you click on any of the links on the right side it goes to an error page which I don't understand, any help would be appreciated.
Your error come from "JoomlArt_JmProducts" extension. Firstly, you should try to run reindex all data. Hope this help. Updated: Here is SQL which make error. You should run this SQL in mysql using phpmyadmin or somthing else to know exactly error. SELECT 1 AS status, e.entity_id, e.type_id, e.attribute_set_id, e.name, e.short_description, e.price, e.special_price, e.special_from_date, e.special_to_date, e.small_image, e.thumbnail, e.news_from_date, e.news_to_date, e.tax_class_id, e.url_key, e.required_options, e.image_label, e.small_image_label, e.thumbnail_label, e.price_type, e.weight_type, e.price_view, e.shipment_type, e.links_purchased_separately, e.links_exist, e.is_imported, e.msrp_enabled, e.msrp_display_actual_price_type, e.msrp, price_index.price, price_index.tax_class_id, price_index.final_price, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS minimal_price, price_index.min_price, price_index.max_price, price_index.tier_price FROM catalog_product_flat_1 AS e INNER JOIN catalog_product_index_price AS price_index ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0 WHERE (e.entity_id IN(14, 15, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 57, 58, 59, 60, 61, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 103, 104, 105, 106, 107, 115, 116, 117, 118, 119, 122, 123, 124, 125, 129, 130, 134, 141, 142, 143, 145, 150, 151, 152, 153, 154, 155, 312, 313, 314, 315, 316, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 345, 346, 347, 348, 349, 350, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 556, 557, 558, 559, 560, 561, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 723, 724, 725, 726, 727, 728, 730, 731, 732, 733, 734, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 853, 854, 855, 856, 858, 859, 860, 862, 863, 864, 865, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 960, 961, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1089, 1090, 1091, 1092, 1093, 1094, 1096, 1097, 1098, 1099, 1100, 1101, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1122, 1123, 1124, 1125, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1192, 1193, 1194, 1200, 1201, 1202, 1212, 1213, 1214, 1220, 1221, 1222, 1223, 1230, 1231, 1232, 1233, 1234, 1235, 1238, 1289, 1290, 1291, 1292, 1293, 1295, 1296, 1297, 1298, 1299, 1301, 1302, 1303, 1305, 1306, 1307, 1308, 1309, 1311, 1312, 1313, 1314, 1315, 1318, 1319, 1320, 1321, 1322, 1324, 1325, 1326, 1327, 1329, 1330, 1331, 1332, 1333, 1349, 1350, 1351, 1352, 1353, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1377, 1378, 1379, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1395, 1396, 1397, 1398, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1501, 1502, 1503, 1504, 1505, 1516, 1517, 1523, 1525, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1566, 1567, 1569, 1570, 1571, 1573, 1574, 1575, 1576, 1577, 1579, 1580, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1630, 1631, 1632, 1633, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1679, 1680, 1681, 1682, 1683, 1684, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1774, 1775, 1776, 1777, 1778, 1786, 1787, 1788, 1789, 1790, 1793, 1794, 1795, 1796, 1797, 1799, 1800, 1801, 1802, 1803, 1811, 1812, 1813, 1814, 1815, 1817, 1818, 1819, 1820, 1821, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1847, 1848, 1849, 1850, 1851, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1901, 1902, 1903, 1904, 1905, 1906, 1913, 1914, 1915, 1916, 1917, 1918, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2094, 2095, 2097, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2139, 2140, 2141, 2142, 2143, 2178, 2179, 2180, 2181, 2182, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2250, 2251, 2252, 2253, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2276, 2277, 2278, 2279, 2281, 2282, 2283, 2284, 2285, 2287, 2288, 2289, 2290, 2291, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2330, 2331, 2332, 2333, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2356, 2357, 2358, 2359, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2383, 2384, 2387, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2478, 2479, 2480, 2481, 2482, 2483, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2602, 2603, 2604, 2605, 2606, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2694, 2695, 2696, 2697, 2699, 2701, 2704, 2706, 2708, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2741, 2742, 2743, 2744, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2766, 2767, 2768, 2769, 2771, 2772, 2773, 2774, 2775, 2776, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2831, 2832, 2833, 2834, 2835, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2911, 2912, 2913, 2914, 2915, 2916, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 3000, 3001, 3002, 3003, 3004, 3006, 3007, 3008, 3009, 3010, 3013, 3014, 3015, 3016, 3017, 3020, 3021, 3022, 3023, 3024, 3025, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3083, 3084, 3085, 3086, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3117, 3118, 3119, 3120, 3121, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3148, 3149, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3235, 3236, 3238, 3239, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3264, 3265, 3266, 3267, 3268, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3323, 3324, 3325, 3326, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3391, 3392, 3393, 3394, 3395, 3397, 3398, 3399, 3400, 3432, 3460, 3461, 3913, 3914, 4248, 4355, 4418, 4427, 4449, 4512, 4513, 4514, 4515, 4516, 4517, 4523, 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4571, 4572, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4593, 4594, 4600, 4601, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4633, 4634, 4636, 4637, 4638, 4639, 4640, 4641, 4646, 4724, 4725, 4791, 4795, 4801)) ORDER BY cat_index_position ASC, e.entity_id ASC LIMIT 12
Sending multidimensional array from jQuery to php
I am passing an array from jQuery to php. The array is generated from a table with this code: var stitchChartArray = []; var row = 0; // turn stitch chart into array for php $('#stitchChart').find('tr').each(function (index, obj) { //first row is table head- "Block #" if(index != 0){ stitchChartArray.push([]); var TDs = $(this).children(); $.each(TDs, function (i, o) { var cellData = [$(this).css('background-color'), $(this).find("img").attr('src')]; stitchChartArray[row].push(cellData); }); row++; } }); In console it looks like this: [[["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 75, 60)", "symbols/184.png"], ["rgb(75, 90, 60)", "symbols/177.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(75, 75, 60)", "symbols/184.png"], ["rgb(75, 90, 60)", "symbols/177.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 75, 60)", "symbols/184.png"], 7 more...], [["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(98, 119, 57)", "symbols/210.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(150, 150, 195)", "symbols/72.png"], 7 more...], [["rgb(75, 165, 105)", "symbols/187.png"], ["rgb(134, 158, 134)", "symbols/64.png"], ["rgb(165, 180, 180)", "symbols/171.png"], 7 more...], [["rgb(60, 150, 75)", "symbols/189.png"], ["rgb(120, 120, 90)", "symbols/225.png"], ["rgb(143, 163, 89)", "symbols/209.png"], 7 more...]] It represents each row of a table->each cell of row->[0]rgb value of bg of cell [1]icon in cell. This jQuery code returns the correct element(and rgb value) from the array: alert(stitchChartArray[1][1][0]); //row 1,cell 1, first value(rgb) But when it gets sent to the php script with this: $.post('makeChartPackage.php', {'stitchChart[]': stitchChartArray }, function(data){ alert(data); }); The php throws an error: Cannot use string offset as an array in /Users/tnt/Sites/cross_stitch/makeChartPackage.php on line 33 $stitchChart = $_POST['stitchChart']; echo $stitchChart[1][1][0]; //line 33 I am assuming I am either constructing the array incorrectly or passing it to the php script incorrectly. EDIT: I did this to return the array to jQuery: $stitchChart = $_POST['stitchChart']; print_r($stitchChart); And here was the result: Array ( [0] => rgb(75, 90, 60),symbols/177.png,rgb(75, 75, 60),symbols/184.png,rgb(75, 90, 60),symbols/177.png,rgb(98, 119, 57),symbols/210.png,rgb(180, 195, 105),symbols/388.png,rgb(165, 165, 120),symbols/235.png,rgb(75, 75, 60),symbols/184.png,rgb(90, 90, 45),symbols/195.png,rgb(120, 120, 75),symbols/156.png,rgb(105, 105, 105),symbols/163.png [1] => rgb(105, 105, 105),symbols/163.png,rgb(75, 75, 60),symbols/184.png,rgb(75, 90, 60),symbols/177.png,rgb(75, 90, 60),symbols/177.png,rgb(165, 165, 120),symbols/235.png,rgb(120, 120, 75),symbols/156.png,rgb(75, 90, 60),symbols/177.png,rgb(75, 90, 60),symbols/177.png,rgb(105, 105, 105),symbols/163.png,rgb(120, 120, 90),symbols/225.png [2] => rgb(105, 105, 105),symbols/163.png,rgb(75, 90, 60),symbols/177.png,rgb(75, 75, 60),symbols/184.png,rgb(75, 90, 60),symbols/177.png,rgb(98, 119, 57),symbols/210.png,rgb(75, 90, 60),symbols/177.png,rgb(75, 75, 60),symbols/184.png,rgb(105, 105, 105),symbols/163.png,rgb(120, 120, 90),symbols/225.png,rgb(105, 105, 105),symbols/163.png It appears the array is not multidimensional?
$_POST['stitchChart'] in the context you have addressed it there is (effectively) a JSON representation of a multidimensional array, stored as a string. When you treat a string as a multidimensional indexed array in PHP, you will get that error. The first [x] is treated as a "string offset" - i.e. the character at position x - but the next and any subsequent [x] addresses can only be treated as arrays (you cannot get a substring of a single character) and will emit the error you have received. To access your data as an array in PHP, you need to use json_decode(): $stitchChart = json_decode($_POST['stitchChart'],TRUE); echo $stitchChart[1][1][0]; EDIT Because the jQuery data argument seemingly can't deal with multidimensional arrays, you should use Douglas Crockford's JSON-js library and pass the result into data as a string. NB: use json2.js. Here is how you could do this: stitchChartArray = JSON.stringify(stitchChartArray); $.post('makeChartPackage.php', {'stitchChart': stitchChartArray }, function(data){ alert(data); }); If you use this code, my original PHP suggestion should work as expected.
Google Goggles API workaround issues in PHP
I've been tearing my hair out with the following all day: I'm attempting to send manual requests to Google Goggles with PHP-ported code from this blog post: http://notanothercodeblog.blogspot.com/2011/02/google-goggles-api.html The original blog post has apparantly working code written in .NET, but my platform is PHP. The code I have is: $googleID = substr(md5(rand()), 0, 16); /* */ $url = 'http://www.google.com/goggles/container_proto?cssid=' . $googleID; // $url = 'http://www.google.com/goggles/container_proto?cssid='; // $googleCodes = array(0x22,0x00,0x62,0x3C,0x0A,0x13,0x22,0x02,0x65,0x6E,0xBA,0xD3,0xF0,0x3B,0x0A,0x08,0x01,0x10,0x01,0x28,0x01,0x30,0x00,0x38,0x01,0x12,0x1D,0x0A,0x09,0x69,0x50,0x68,0x6F,0x6E,0x65,0x20,0x4F,0x53,0x12,0x03,0x34,0x2E,0x31,0x1A,0x00,0x22,0x09,0x69,0x50,0x68,0x6F,0x6E,0x65,0x33,0x47,0x53,0x1A,0x02,0x08,0x02,0x22,0x02,0x08,0x01); $googleCodes = array(34,0,98,60,10,19,34,2,101,110,186,211,240,59,10,8,1,16,1,40,1,48,0,56,1,18,29,10,9,105,80,104,111,110,101,32,79,83,18,3,52,46,49,26,0,34,9,105,80,104,111,110,101,51,71,83,26,2,8,2,34,2,8,1); $handle = curl_init($url); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_POSTFIELDS, array("CssidPostBody" => implode("",$googleCodes))); curl_setopt($handle, CURLOPT_HTTPHEADER, array("Content-Type: application/x-protobuffer", "Pragma: no-cache")); $response = curl_exec($handle); /* */ print_r($response); I keep getting the following response back from Google: "Unparseable Container Request" I believe my issue is with the format of $googleCodes. The original article has the following for it: private static byte[] CssidPostBody = new byte[] { 34, 0, 98, 60, 10, 19, 34, 2, 101, 110, 186, 211, 240, 59, 10, 8, 1, 16, 1, 40, 1, 48, 0, 56, 1, 18, 29, 10, 9, 105, 80, 104, 111, 110, 101, 32, 79, 83, 18, 3, 52, 46, 49, 26, 0, 34, 9, 105, 80, 104, 111, 110, 101, 51, 71, 83, 26, 2, 8, 2, 34, 2, 8, 1 }; I realise this is an issue that is potentially very unique, but I'm hoping someone with experience with .NET byte arrays could point me in the right direction.
$googleCodes = array(34,0,98,60,10,19,34,2,101,110,186,211,240,59,10,8,1,16,1,40,1,48,0,56,1,18,29,10,9,105,80,104,111,110,101,32,79,83,18,3,52,46,49,26,0,34,9,105,80,104,111,110,101,51,71,83,26,2,8,2,34,2,8,1); foreach ($googleCodes as $n=>$char) { $googleCodes[$n] = chr($char); } I think these are codes for the characters, and I suspect they're being sent in binary. Either that, or they should be zero padded. Can you provide a link to the original method in the foreign language? We just want to emulate their method. I think your numbers are running together, so it's a question of the desired format.